带有midi.js的数组/循环

时间:2015-07-07 11:40:45

标签: arrays loops midi midi.js

我希望在midi.js中使用一个playound函数来循环一个数组,我选择了和弦,也许是4个差异。但我无法弄明白。我可以让它做一个单独的数组,但不是多个,并且它不循环,只播放我设置它的时间(现在是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 个答案:

答案 0 :(得分:0)

你的代码应该可以工作,除了为了预测工作的时间,我发现在调用成功回调之后你必须等一下。如果您在加载后立即拨打电话,则会不定期地播放音符。

我建议使用下面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);
}