const fs = require(`fs`) const _ = require(`lodash`) const { Player } = require(`midi-player-js`) const VOWELS = [`a`, `e`, `i`, `o`, `u`] const CONSONANTS = [`p`, `g`, `f`, `c`, `qu`, `h`, `j`, `n`, `l`, `m`, `t`, `d`, `ch`, `r`] const player = new Player() player.loadFile(`./test.mid`) const songTime = player.getSongTime() const allEvents = player.getEvents() const MAX_TICKS = _.last(_.maxBy(allEvents, (events) => _.last(events).tick)).tick const parsedEvents = allEvents.map((track) => { return track.filter(event => event.name === `Note on`).map((event) => { return { timeSeconds: (event.tick / MAX_TICKS) * songTime, midiPitch: event.noteNumber, librettoChunk: { vowel: { name: _.sample(VOWELS), duration: 0.20000000298023224 }, suffix: [ { name: _.sample(CONSONANTS), duration: 0.10000000149011612 } ] } } }) }).filter(track => !_.isEmpty(track)).map((track) => { return { notes: track, startSuffix: [ { name: _.sample(CONSONANTS), duration: 0.10000000149011612 } ] } }) const song = { theme: 1, parts: parsedEvents } fs.writeFile(`test.json`, JSON.stringify(song), () => console.log(`done`))