シンセサイズ
楽器
楽器は、1個以上のオペレータ、アルゴリズム、ADSRエンベロープによって決定される。
オペレータ
波を生成する機構をオペレータと言う。 オペレータは、それ単体では正弦波を生成する。 オペレータには次の6種類のパラメータが与えられる。
- 振幅
- 周波数比
- アタックタイム
- ディケイタイム
- サステインレベル
- リリースタイム
以降の数式を単純化させるために、便宜上次の数式を定義する。 オペレータの振幅を\(v\)、ADSRエンベロープの係数を\(k(t)\)、楽器への入力の音高(周波数)を\(f\)、オペレータの周波数比を\(f_r\)、時刻を\(t(\geq0)\)、FM変調に用いる別の波を\(m(t)\)、オペレータの生成する波\(w_{base}(t, m)\)は次のように表される。
\[ w_{base}(t, m) = v \cdot k(t) \cdot \sin(2\pi f f_r t + m(t)) \]
アルゴリズム
オペレータの組合わせ方をアルゴリズムと言う。 オペレータは\(N\)分木構造に組み合わせられ、次のように評価される。
- 葉から根にかけて順番に評価される。
- 兄弟のオペレータはすべてAM変調される。
- 親子のオペレータは子をモジュレータ、親をキャリアとしてFM変調される。
FM変調
ある波の周波数を別の波で変調することをFM変調と言う。 また、変調する側のオペレータをモジュレータ、変調される側のオペレータをキャリアと言う。
オペレータの振幅を\(v\)、オペレータの周波数比を\(f_r\)、楽器への入力の音高(周波数)を\(f\)、時刻を\(t(\geq0)\)、モジュレータの生成する波を\(w_m(t)\)としたとき、キャリアの生成する波\(w_c(t)\)は次のように表される。
\[ w_c(t) = w_{base}(t, w_m(t)) \]
AM変調
ある波の振幅を別の波で変調することをAM変調と言う。
時刻を\(t(\geq0)\)、対象となるオペレータの数を\(N(>0)\)、それぞれオペレータの生成する波を\(w_i(t)\)としたとき、(仮想的な)オペレータの生成する波\(w(t)\)は次のように表される。
\[ w(t) = \sum^N_{i=1} w_i(t) \]
ADSRエンベロープ
波の時間的変化をエンベロープと言う。 また、次の4種類のパラメータによってエンベロープを決定するものをADSRエンベロープと言う。
- アタックタイム\(a\):入力が始まってから係数が1になるまでの時間
- ディケイタイム\(d\):アタックタイムが経過してから係数がサステインレベルになるまでの時間
- サステインレベル\(s\):ディケイタイムが経過してから入力が終わるまでの係数
- リリースタイム\(r\):入力が終わってから係数が0になるまでの時間
時刻を\(t(\geq0)\)、入力が終了する時刻を\(T(\geq t)\)、オペレータの生成する波を\(w(t)\)としたとき、ADSRエンベロープの係数\(k(t)\)は次のように表される。
\[ k(t) = \left\{ \begin{array}{cl} t/a & (t < a)\\ s + (1 - s)(1 - (t-a)/d) & (a \leq t < a + d)\\ s & (a + d \leq t < T) \\ s (1 - (t - T) / r) & (T \leq t < T + r) \end{array} \right. \]
フィードバック
オペレータが自身の出力でFM変調する機能をフィードバックと言う。
時刻を\(t(\geq0)\)、フィードバックの回数を\(N\)、\(n\)回フィードバックを行ったオペレータの生成する波を\(w_n(t)\)、\(w_0(t)=w_{base}(t, 0)\)としたとき、生成される波\(w_N(t)\)は次のように表される。
\[ w_N(t)=w_{base}(t, w_{N-1}(t)) \]