我希望在midi.js中使用一个播放声音函数来循环一个数组,我选择的和弦可能是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;
}发布于 2015-09-03 03:51:40
你的代码应该可以工作了,除了为了达到预期的工作时间,我发现你必须在调用成功回调之后等待一段时间。如果您在加载后立即调用,则音符播放不规律且顺序混乱。
我推荐使用下面的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);
}https://stackoverflow.com/questions/31267575
复制相似问题