我在尝试让 sinewave.js-plugin 连续播放多个音符时遇到问题。
这是我的代码。
scalePlayer = function(){
var command = arguments[0];
if (command == 'play'){
sinewave.setFrequency(261.63); // C4
sinewave.play();
}else if (command == 'pause'){
sinewave.pause();
}else if (command == 'cmajor'){
// C major scale
var scale=[
"130.81",
"146.83",
"164.81",
"174.61",
"196.00",
"220.00",
"246.94",
"261.63"];
s = scale.length;
i=0;
while (i<=s){
setTimeout("sinewave.setFrequency("+parseFloat(scale[i])+")", 1000);
console.log(parseFloat(scale[i]));
i++;
}
}else if (command == 'test'){
setTimeout("sinewave.setFrequency(300)", 1000);
setTimeout("sinewave.setFrequency(500)", 1000);
}
}
“测试”命令只播放两个音符中的第一个音符,而实际通过音阶频率的那个不播放任何内容,但会从数组中打印出正确的音调。
我想要实现的是“cmajor”命令会播放一个音阶,每 1 秒一个音符。
我觉得 setTimeout 引起了问题,我不明白为什么“测试”命令不会播放两个不同的音符。