chomens-bot-js/util/midi_converter/convert_note.js
2022-08-14 16:51:45 +07:00

39 lines
1.1 KiB
JavaScript

const instrumentMap = require('./instrument_map.js')
const percussionMap = require('./percussion_map.js')
function convertNote (track, note) {
let instrument = null
const instrumentList = instrumentMap[track.instrument.number]
if (instrumentList != null) {
for (const candidateInstrument of instrumentList) {
if (note.midi >= candidateInstrument.offset && note.midi <= candidateInstrument.offset + 24) {
instrument = candidateInstrument
break
}
}
}
if (instrument == null) return null
const pitch = note.midi - instrument.offset
const time = Math.floor(note.time * 1000)
return { time, instrument: instrument.name, pitch, volume: note.velocity }
}
function convertPercussionNote (track, note) {
if (note.midi < percussionMap.length) {
const mapEntry = percussionMap[note.midi]
if (mapEntry == null) return
const { pitch, instrument } = mapEntry
const time = Math.floor(note.time * 1000)
return { time, instrument: instrument.name, pitch, volume: note.velocity }
}
return null
}
module.exports = { convertNote, convertPercussionNote }