FM 音源みたいなもの JavaScript の説明 |
S(t)=Asin(ωct+βsin(ωmt))名前は「FM 音源」ですが,この式を見ると,これは周波数変調ではなく位相変調だと思うのですが...
t: 時間
S(t): 時間tにおける合成信号
A: キャリアの振幅
β: 変調指数
ωc: キャリアの角周波数
ωm: 変調信号の角周波数
y[n]=(1/a0)(b0x[n]+b1x[n−1]+b2x[n−2]+ … −a1y[n−1]−a2y[n−2]− …)係数(b0,b1,b2,…),(a0,a1,a2,…)は IIRFilterNode 作成時にパラメータとして与えます.
y[n]=x[n]−x[n−1]これで 1 サンプル前の値との差分をとることができます.
変調レベル設定の GainNode は,指定した変調レベルに従ってオペレータの変調入力レベルを設定するものです.
オペレータ 1 の変調レベルはフィードバックの量を調節するものになります.
残りのひとつは以下のようなものですが,このアルゴリズムは,6 番のアルゴリズムでオペレータ 3 とオペレータ 4 の変調レベルをゼロに設定したのと同じことになるので,省きました.
1
2
3
4
5
6
7
OPn: オペレータ n (n = 1,2,3,4)
変調する側と変調される側のオペレータの数が 1 対多や多対 1 で接続されているときは,1 個の側のレベル設定を変えると,相手側のすべてのオペレータの信号に対して影響があります.
エンベロープ
・ アタック レートアタック レート 〜 サステイン レベルがすべて未入力または 0 の場合,「発音」ボタンを押してから放すまでの間ずっと,エンベロープ値は最大値になります.
アタック時のエンベロープ値の 1ms あたりの増加量を,最大値に対する比率で,0 から 1 までの数値で指定します.・ ディケイ レート
未入力または 0 を指定した場合は,最初から最大値になります.
アタック後のエンベロープ値の 1ms あたりの減衰量を,最大値に対する比率で,0 から 1 までの数値で指定します.サステイン レベルに達するまでこのレートで減衰します.・ サステイン レート
未入力または 0 を指定した場合は,アタック終了後直ちにサステイン レベルになります.
ディケイ後のエンベロープ値の 1ms あたりの減衰量を,最大値に対する比率で,0 から 1 までの数値で指定します.・ リリース レート
未入力または 0 を指定した場合は,サステイン状態の間エンベロープ値は減衰しません.
リリース時のエンベロープ値の 1ms あたりの減衰量を,最大値に対する比率で,0 から 1 までの数値で指定します.・ サステイン レベル
未入力または 0 を指定した場合は,「発音」ボタンを放すと直ちにエンベロープ値は 0 になります.
サステイン開始時のエンベロープ値を,最大値に対する比率で,0 から 1 までの数値で指定します.
未入力または 0 を指定した場合は,サステイン レベルは 1 になります.その場合,ディケイ レートは意味を持ちません.
fm_samp1.dat
fm_samp2.dat
fm_samp3.dat
fm_samp4.dat
fm_samp5.dat