たま日記

たまに書く

DeicsOnzeは無理だった

自作ウィンドシンセの内蔵ソフト音源として考えていたDeicsOnze、TX81ZなるFM音源モジュールのエミュレータなのだがESP32で動かすことはできなかった…残念! 波形?を保存するテーブルがメモリに入りきらず、Arduino環境ではコンパイルできなかった。Windows上でMSYS2 MinGW64 + ASIO + PortAudioで動かすところまではできたんだけど、あきらめる。

というわけで、これまで使ってきたVGMPlayのym2151.cにTX81Zの機能を追加していく作業をしていた。TX81Zのプリセットを鳴らせることが目標。

DX7ぐらいしか聞いたことなかったのだが、他にもいろんなFM音源製品が発売されていたことを知る。TX81Zも相当有名なFM音源らしくあちこちに有用な資料が転がっている。マニュアルもPDFでダウンロードできた。

TX81ZのFM音源チップはYM2414(OPZ)。YM2151(OPM)の後継?チップだそうな。音色データを移植しているサイトもあった。
ameblo.jp
blog.livedoor.jp
だからきっと、ym2151.cを使えばTX81Z(に近い音)を再現できるはず!


プリセットのフォーマットはVoice Bulk Data Format(VMEM)という基本形式に、Additional Voice Bulk Data Formatという形式で機能拡張している。DeicsOnzeのソースツリー内に2000個以上登録されている。テキスト形式なので見やすい。なぜかTX81ZやDX11のファクトリープリセットまで登録されている。いいのか?

このデータを構成する値を読み込めるようにym2151.cを改造してみることにする。現時点で追加・変更した機能は次の通り:

  • レジスタに書き込む値:VMEMの値 0~99 を 0~127に変換してYM2151のレジスタに書き込む必要があるものがある。ここが参考になった。ROMコードを解析して調べたらしい。すごいな。
  • オペレータの波形:サイン波以外の波形が発振可能なので増やす。ここここが参考になった。
  • DET2以外:YM2151では16種のMUL値と4種のDT2値{1.00 | 1.41 | 1.57 | 1.73 }でオペレータの周波数を指定するが、TX81Zはもっと細かく指定できる。
  • LFO:ピッチや音量の変化を出音の最初からさせるのではなく、遅らせて変化をかける機能がある。

ym2151.cの正しさはある程度担保されているはずだが、自分が加えた変更は正しいかどうか不明。実機はない。ので前述したファクトリープリセットで鳴らした音と実機の音を聴けるサイトの音を聴き比べてみることにした。

似ている音もあるし、似ていない音もある。ピアノ系は再現できていない。何が違うのかよく分からない。吹く楽器だけでも再現できていればいいか。ym2151.cを単純に鳴らしていたのに比べるとずいぶん楽器らしくなってきた。まだWindowsでしか動かしていない。多分ESP32でも動くと思われ。


今後の予定:

EWI Soloが発売されたことには驚いた。もう少し小さいとよいのだけれど。
ewi.akai-pro.jp