abcjs
Version:
Renderer for abc music notation
45 lines (39 loc) • 1.31 kB
JavaScript
var SynthSequence = require('./synth-sequence');
var CreateSynth = require('./create-synth');
var activeAudioContext = require("./active-audio-context");
function playEvent(midiPitches, midiGracePitches, millisecondsPerMeasure) {
var sequence = new SynthSequence();
for (var i = 0; i < midiPitches.length; i++) {
var note = midiPitches[i];
var trackNum = sequence.addTrack();
sequence.setInstrument(trackNum, note.instrument);
if (i === 0 && midiGracePitches) {
for (var j = 0; j < midiGracePitches.length; j++) {
var grace = midiGracePitches[j];
sequence.appendNote(trackNum, grace.pitch, 1 / 64, grace.volume, grace.cents);
}
}
sequence.appendNote(trackNum, note.pitch, note.duration, note.volume, note.cents);
}
var ac = activeAudioContext();
if (ac.state === "suspended") {
return ac.resume().then(function () {
return doPlay(sequence, millisecondsPerMeasure);
});
} else {
return doPlay(sequence, millisecondsPerMeasure);
}
}
function doPlay(sequence, millisecondsPerMeasure) {
var buffer = new CreateSynth();
return buffer.init({
sequence: sequence,
millisecondsPerMeasure: millisecondsPerMeasure
}).then(function () {
return buffer.prime();
}).then(function () {
buffer.start();
return Promise.resolve();
});
}
module.exports = playEvent;