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がまだ対応できないけど,小手先修正だけではいかんともし難い感じなので,とりあえず保留.