abcjs
Version:
Renderer for abc music notation
47 lines (41 loc) • 1.5 kB
JavaScript
var SynthSequence = require('./synth-sequence');
var CreateSynth = require('./create-synth');
var activeAudioContext = require("./active-audio-context");
function playEvent(midiPitches, midiGracePitches, millisecondsPerMeasure, soundFontUrl, debugCallback) {
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, soundFontUrl, debugCallback);
});
} else {
return doPlay(sequence, millisecondsPerMeasure, soundFontUrl, debugCallback);
}
}
function doPlay(sequence, millisecondsPerMeasure, soundFontUrl, debugCallback) {
var buffer = new CreateSynth();
return buffer.init({
sequence: sequence,
millisecondsPerMeasure: millisecondsPerMeasure,
options: { soundFontUrl: soundFontUrl },
debugCallback: debugCallback,
}).then(function () {
return buffer.prime();
}).then(function () {
buffer.start();
return Promise.resolve();
});
}
module.exports = playEvent;