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);
}
}
「テスト」コマンドは、2 つの音のうち最初の音のみを再生し、実際にスケール周波数を通過する音は何も再生しませんが、配列から正しい音を出力します。
私が達成しようとしているのは、「cmajor」コマンドが 1 秒ごとに 1 つの音階を再生することです。
setTimeout が問題を引き起こしているように感じます。なぜ「test」コマンドが 2 つの異なるノートを再生しないのか理解できません。