FM音源プログラム (12) -- オペレータ (5)
F-NUMBER
「YMF715x (OPL3-SA3) -Register Description Document-」(以下「rege」と略記) では、 F-NUMBER について、
Frequency Information : These bits determine the frequency information for one octave.
と説明しています。
これだけでは何のことか良く分かりませんが、具体的な式
と、BLOCK = 4 の時の具体的な数値の表
音名 周波数[Hz] F_Number (10進) C 261.6 346 C# 277.2 367 D 293.7 389 D# 311.1 412 E 329.6 436 F 349.2 462 F# 370.0 490 G 392.0 519 G# 415.3 550 A 440.0 582 A# 466.2 617 B 493.9 654 C 523.3 693
も記載されています。
ここで、前回示した式
から、フェーズアキュムレータに必要なビット数 を求めてみます。
まず、周波数ですが、オペレータの最終的な周波数は基本のピッチ周波数に MULT で表現されている倍率をかけたものになります。
MULT > 0 の場合は整数倍なのに、MULT = 0 の場合だけ 1/2 倍で、処理が異なっているのは効率的ではありません。
そこで、あらかじめ基本ピッチ周波数を MULT = 0 の場合に相当する 1/2 倍にしておいて、MULT の倍率の方は 2 倍しておき、両者を掛け合わせた結果の周波数が目的の値になるようにします。
具体的には、MULT=0 で 1 倍、MULT=1 で 2 倍、MULT=2 で 4 倍、... MULT=15 で 30 倍にします。
したがって、 F_Number の計算には、目的の周波数の半分を代入します。
サンプリング周波数 とサンプリング周期 の関係 から、前の式は、
となります。 両辺の 2 の対数を取り、整理すると、
となります。
- fs = 49518
- BLOCK = 4
- F_Number = 582
- f = 440.0 / 2
を代入すると、
となり、OPL3 のフェーズアキュムレータの幅は 21 ビット以上であることが推測されます。