Массивы / циклы с midi.js
Я собираюсь использовать функцию playsound в midi.js для зацикливания массива с выбранными аккордами, может быть, 4 diff. Но я не могу понять это. Я могу заставить его делать один массив, но не несколько, и он не зацикливается, а только воспроизводит количество времени, которое я установил (сейчас 8).
window.onload = function () {
MIDI.loadPlugin({
soundfontUrl: "../MIDI.js/examples/soundfont/",
instrument: "acoustic_grand_piano",
onprogress: function(state, progress) {
console.log(state, progress);
},
onsuccess: function () {
for (var i = 0; i < 9; i++){
playsound([37,59,61,71,80])}
}});
var delay =1;
function playsound($chords)
{
var velocity = 127;
MIDI.setVolume(0, 127);
MIDI.chordOn(0, $chords, velocity, delay);
MIDI.chordOff(0, $chords, delay+1);
delay += 1;
}
1 ответ
Ваш код должен работать, за исключением того, что для того, чтобы время работало предсказуемо, я обнаружил, что вам нужно немного подождать после вызова обратного вызова. Если вы звоните сразу после загрузки, ноты воспроизводятся нерегулярно и не по порядку.
Я рекомендую использовать такую функцию, как playChords
ниже и тестирование после загрузки, вызывая функцию нажатием кнопки. Например, эта функция воспроизводит три разных аккорда с интервалом в 1/2 секунды, всего 9 раз.
chords = [[37,59,61,71,80],[38,60,62,72,81],[39,61,63,73,82]];
function playChords() {
for (var i = 0; i < 9; i++){
playChord(i/2, chords[i%chords.length]);
}
}
function playChord(delay, chord) {
MIDI.chordOn(0, chord, 127, delay);
MIDI.chordOff(0, chord, delay+1);
}