ピッチ・エンベロープ問題

ピッチ・エンベロープ の問題、解決に至らずとも、代替案をば。

まぁ、要は

osc.frequency.value = 440;
osc.frequency.linearRampToValueAtTime(110, context.currentTime + 2 );

としたときに、Aから2オクターブ下のAに2秒かけて滑らかに音程を変化させたいわけだけど、どういうわけか、ピープーと段階的に変化しちゃって困る(´・ω・`)なわけでした。

で、
osc.frequency.exponentialRampToValueAtTime(110, context.currentTime + 2 );

を試したみたけど、ダメ。

しょうがないので、

osc.frequency.setTargetAtTime(110, context.currentTime, 2 );

としてみたら、何となくそれらしくなった。

ただ、setTargetAtTime() は、Target になる値(ここでは110)の約63.2%までしか変化しないという難点が。

Target値を補正するか、変化時間(ここでは2)を短く補正するかすれば使えるかも。


というわけで、完全な解決にはならないけど、代替案。

まぁ、osc.frequency を直接いじるのも、後々、LFOをつけるぜぃなんてなったときに面倒くさそうなので、

osc.detune.value = 0;
osc.detune.setTargetAtTime(-2400, context.currentTime, 2 );

なんてやってみたら似たような結果に。
こちらで、補正値を計算してやればラクなのかもと思ったり。

スポンサーサイト

コメント

非公開コメント