snd.jsで、AudioParamのエンベロープを簡単に設定できるようにしてみました。
例えば、こんな感じの書き方でオシレーター周波数のエンベロープを設定できます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// オシレータ生成 | |
var osc = new snd.OscillatorSource("OSC-01"); | |
// ゲインを0.1にする | |
osc.volume = 0.1; | |
// マスタ(AudioDestination)に接続して音が出るようにする | |
osc.connect(snd.MASTER); | |
// オシレータの出力開始 | |
osc.start(); | |
// エンベロープの設定 | |
// setScheduledValuesメソッドに時間と値と補間法をまとめたオブジェクトの配列を渡す | |
// time: 変化が終わる時間, | |
// value: time秒後のAudioParamの値, | |
// type: 補間方法(snd.SET: time秒後にvalueを設定, snd.LINER: 直線, snd.EXPONENTIALLY: 対数) | |
osc.frequencyParam.setScheduledValues([ | |
{time: 0.0, value: 0.0, type: snd.SET}, | |
{time: 0.5, value: 440.0, type: snd.LINER}, | |
{time: 0.75, value: 220.0, type: snd.EXPONENTIALLY}, | |
{time: 1.75, value: 220.0, type: snd.SET}, | |
{time: 2.25, value: 0.0001, type: snd.EXPONENTIALLY}, // AudioParam#exponentialRampToValueAtTimeは最終値を0にできないので、ゼロに近い値で止めて… | |
{time: 2.26, value: 0.0, type: snd.SET} // ちょっと後にゼロにする | |
]); |
ということで、ライブラリ更新のご連絡でした。
あと、単純にこの部分だけスニペットにして使いたい人もいるような気がするので、該当部分だけピックアップしてのっけておきます。
興味がある人はどうぞ