OPMエミュレータ上でOPL3をエミュレーションする上で必要な拡張


ここ数ヶ月mml仕様と併せて,色んな音源チップの仕様書やエミュレータのソースも覗いてた.


OPL3ってのは,Sound Blaster Pro2に使われてたFM音源チップ.Sound Blasterは,FM音源というよりは,音質の悪いMIDI音源というイメージがあったので,OPL3舐めてた.正直,劣化OPM程度としか思ってなかったけど,中々どうして,悪くない.

  • sin波以外に7種類からの波形選択
  • key scale level 対応
  • 各オペレータ別にams/amd/pme/pmdを設定可
  • Left/Right/Foward/Backの4ch対応

特に波形選択とkslは魅力的.一方,OPMと比べて”劣化”部分も沢山あって,

  • デチューン無し
  • srが無い代わりに減衰音と持続音の切り替え
  • 2op/4op切り替え(2+4アルゴリズム)
  • ar/dr 各15段階
  • key scale rate 2段階
  • tl 64段階

デチューン無しは痛い.あとADSSRの代わりにADR+egt(減衰/持続の切替)なのが微妙.音色マニアではないのでレートの粗さは然程気にならないけど,選択できるアルゴリズムはOPM系と比べて,少し使い難い感じがする(実際に弄ってみないとわからないけど).


で,このOPL3をOPMベースのエミュレータ上で再現するために必要な拡張を列挙してみる.

  • 波形テーブルの差し替えに対応
  • key scale level 対応
  • ameの代わりにamsを設定,右シフト演算でame=true/falseに対応(falseの時,>>31と計算させる)
  • egt=trueはsr=0/egt=falseはsr=rrで対応
  • OPL3用のアルゴリズムを追加
  • OPL3;ksr=1は,OPM:ks=2に相当(エミュのソースから逆算)
  • tlはOPMと同値で tl1=0.75dB

あとOPL3のエンベロープは,14.32MHzを36x8分周=49.72kHzで駆動するのに対し,OPMは,3.58MHzを64x3分周=18.65kHzで駆動している.で,エミュのソースを見る限り,エンベロープ用テーブルはOPL3の方が4つ高い値にシフトしているので,エンベロープの速度は(49.72/2)/18.65=1.33倍OPL3の方が早い計算になるはず.多分.
波形テーブルは,エミュソースとhttp://d.hatena.ne.jp/pcm1723/20080201/1201867997を参考に作成.WS=7の解釈が上記参考ページとMAMEソースで違ってるっぽいけど,どっちも確証は無いみたい.まあ大体合ってれば良いんじゃないかと思う.
Left/Right/Foward/Back4chと各オペレータのamd/pmdがまだ対応できないけど,小手先修正だけではいかんともし難い感じなので,とりあえず保留.