YM2608 (OPNA) アプリケーションマニュアルや各種解説資料では、2つのオペレータを直列接続した際の出力波形について概ね下記の計算式が記載されています。
A(t)は出力波形の振幅すなわち音量となるため、エンベロープの設定の他、ミキサーのフェードを上げ下げするような後段の操作でも制御可能であることが分かります。
I(t)は変調度と記載されていますが、FM合成ロジックの中で音色を決定づける重要な要素にも関わらず、モジュレータの音量に関するパラメータTLやDL1に対し取り得る値などの性質が示されていません。
wcとwmはそれぞれキャリアーとモジュレーターの角周波数であり、ノート番号やピッチベンドなどによって決まる基本となる周波数と、周波数倍率を求めるパラメータMUL、デチューンにより求められます。
YM2151の資料ではwcをNc+Dc (ノート番号に伴う周波数+デチューン) と表していたり見た目わかりづらい印象があったためYM2608資料の式を採用しました。記号の違いはあっても、式の意味は変わりません。
計算式の変調度I(t)が取り得る最大値として、モジュレーターのパラメータTLが出力波形に与える影響を探ります。
まずVOPMで2つのオペレータM2とC2が直列に繋がるアルゴリズムを選択してM2の音量TLを変化させた様子を計測します。M1とC1は無効にします。M2とC2は同じ110Hz (ノートA0) を出力し、エンベロープによる音量変化がないようにします。VOPMのパラメータはこちら。
音色の変化を捉えるため、第1 (基音)、第2、第3倍音それぞれの音量を記録します。
f1=110Hz、f2=220Hz、f3=330Hzにおける音量を計測します。当初wavespectraに表示された値を3倍音分*127段階ずつ転記していましたが、ミスが多く非効率なのでMAX for Live で測定結果をテキストで記録できるようにしました。
計測用のパッチ (pfft~で呼ばれるサブパッチ) はこんな感じです。窓にはBlackman、オーバーラップ数4を指定し、wavespectraの計測と一致することを確認済みです。以下は計測結果の一部です。
TL | f1 | f2 | f3 |
---|---|---|---|
127 | -0.16 | n/a | n/a |
81 | -0.16 | n/a | n/a |
80 | -0.16 | -38.64 | n/a |
72 | -0.17 | -32.62 | -73.00 |
64 | -0.19 | -26.61 | -59.69 |
56 | -0.29 | -20.61 | -47.32 |
48 | -0.67 | -14.67 | -35.31 |
40 | -2.33 | -8.99 | -23.68 |
32 | -13.21 | -4.35 | -13.41 |
24 | -2.21 | -4.60 | -10.37 |
16 | -6.04 | -15.16 | -5.24 |
8 | -9.55 | -25.18 | -8.60 |
0 | -12.85 | -34.90 | -12.46 |
TLが127から81の場合は倍音が発生しません。TLが80から73までの区間など、TLが変わってもモジュレータの出力が変わっていないと思われる区間があります。(グラフで階段状になっている箇所) これらの区間はキャリアーの音量としてTLを変えていった場合でも変化がありませんでした。実際のチップも同じ動作かは定かでありません。
TL=54から0にかけては値が1変わるごとに相応の変化が見られます。
また、TLが80から30辺りまでは倍音成分が連続して増加していますが、TL=25以降は基音がより減衰して第2、第3倍音の音量が大きくなったり、整数倍以外の倍音成分が現れ始め発振した様な状態になります。
キャリアーとモジュレータの周波数比が高くなるにつれて、モジュレーターのTLが大きくても (出力が小さくても) より発振しやすくなっていきます。
ここからMAXによる再現比較によりTLに対する変調度を求めていきます。本当は波形の計算式をベッセル級数に変換してTLに対するモジュレータの出力値を解きたかったのですが、頓挫しました。
変調度はsin関数の位相に係る変数であることから最大値が2PIになると予想したところ、TL=80の場合とモジュレーターの出力 (図3中のlevel) が4PI - 54.25dBの場合とほぼ一致することが分かりました。
YM2151アプリケーションマニュアルにはTLは0.75dB刻みであることが明記されているため、モジュレータの出力の最大値は4PI * (-0.75 * TL + 5.75)dB で求められます。
VOPM | MAX for Live | ||||||
---|---|---|---|---|---|---|---|
TL | f1 | f2 | f3 | level (dB) | f1 | f2 | f3 |
80 | -0.16 | -38.64 | n/a | -54.25 | -0.08 | -38.60 | -83.28 |
72 | -0.17 | -32.62 | -73.00 | -48.25 | -0.08 | -32.60 | -71.29 |
64 | -0.19 | -26.61 | -59.69 | -42.25 | -0.11 | -26.60 | -59.30 |
56 | -0.29 | -20.61 | -47.32 | -36.25 | -0.20 | -20.62 | -47.32 |
48 | -0.67 | -14.67 | -35.31 | -30.25 | -0.57 | -14.70 | -35.43 |
40 | -2.33 | -8.99 | -23.68 | -24.25 | -2.16 | -9.03 | -23.83 |
32 | -13.21 | -4.35 | -13.41 | -18.25 | -12.13 | -4.35 | -13.52 |
24 | -2.21 | -4.60 | -10.37 | -12.25 | -2.37 | -4.26 | -9.93 |
16 | -6.04 | -15.16 | -5.24 | -6.25 | -7.08 | -15.56 | -5.05 |
8 | -9.55 | -25.18 | -8.60 | -0.25 | -13.26 | -27.97 | -10.25 |
0 | -12.85 | -34.90 | -12.46 | 5.75 | -35.84 | -52.61 | -23.95 |