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 )