File size: 1,500 Bytes
af6912c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
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;
|