App-Music-ChordPro
view release on metacpan or search on metacpan
lib/ChordPro/res/abc/abc2svg/MIDI-1.js view on Meta::CPAN
if (qs < 6.85 || qs > 7.2)
abc.syntax(0, abc.errs.bad_val, "%%MIDI " + a[1])
cfmt.temper = tb40(qs) // pitches / A in 100th of cents
break
}
}, // do_midi()
// set the MIDI parameters in the current voice
set_vp: function(of, a) {
var i, item, s,
abc = this,
curvoice = abc.get_curvoice()
// set the voice parameters before inserting any block
of(a.slice(0)) // (copy because the parameters are removed)
for (i = 0; i < a.length; i++) {
switch (a[i]) {
case "channel=": // %%MIDI channel
s = abc.new_block("midiprog")
s.play = s.invis = 1 //true
s.chn = +a[++i]
break
case "instr=": // %%MIDI program
s = abc.new_block("midiprog")
s.play = s.invis = 1 //true
s.instr = a[++i].split(' ')
if (s.instr[1])
s.chn = s.instr.shift() - 1
else
s.chn = curvoice.v < 9 ?
curvoice.v :
curvoice.v + 1
s.instr = +s.instr[0]
break
case "midictl=": // %%MIDI control
if (!curvoice.midictl)
curvoice.midictl = []
item = a[++i].split(' ');
curvoice.midictl[item[0]] = Number(item[1])
break
case "mididrum=": // %%MIDI drummap note midipitch
if (!curvoice.map)
curvoice.map = {}
curvoice.map = a[++i]
break
}
}
}, // set_vp()
do_pscom: function(of, text) {
if (text.slice(0, 5) == "MIDI ")
abc2svg.MIDI.do_midi.call(this, text)
else
of(text)
},
set_hooks: function(abc) {
abc.do_pscom = abc2svg.MIDI.do_pscom.bind(abc, abc.do_pscom);
abc.set_vp = abc2svg.MIDI.set_vp.bind(abc, abc.set_vp)
}
} // MIDI
if (!abc2svg.mhooks)
abc2svg.mhooks = {}
abc2svg.mhooks.MIDI = abc2svg.MIDI.set_hooks
( run in 1.216 second using v1.01-cache-2.11-cpan-2398b32b56e )