事象
WebAudioAPIを使って、キーボードを作って遊んでいたのですが、
突如音階が変わらなくなりました。
サンプル↓
https://alf-ytakada.github.io/html5-oscillator-issue/
具体的に、OscillatorNodeのfrequencyに対して、setValueAtTimeを下記のように使うと、これまですぐに周波数が設定されていたのに、変わらなくなってしまいました(常に440hz出力)。
oscillator.frequency.setValueAtTime
var oscillator = ctx.createOscillator()
var hz = 880;
oscillator.frequency.setValueAtTime(hz, 0);
oscillator.connect(ctx.destination);
OscillatorNodeは、frequencyを変更する時に、下記のやり方もあるのですが、
oscillator.frequency.value
oscillator.frequency.value = hz;
これだと、同じoscillatorの周波数を変える際に、
元→先の途中の周波数が補完されてしまいます(グライド)。
今すぐ対処するには?
下記で良いようです。
oscillator.frequency.setValueAtTime(hz, ctx.currentTime);
issue
ということで調べた所、ちゃんとバグ報告が上がっていました。
Immediate scheduling of AudioParam using setValueAtTime occasionally does not work.
治るのも時間の問題でしょう!