MUCOM88完全に理解した――の話

というわけで、前日はエイプリルフールでしたが、実際にmucom88で鳴らしているのは嘘ではないです。
(環境がある人はデータをダウンロードして実行できます。)

最大の嘘は、コメントの April Fools’ Day Special Edition という部分かも。それ用に作ったのではないので。

「完全に理解した」は嘘というか「C++を完全に理解してしまったかもしれない」みたいなアレです。


元を辿ると、少し前までOPNAのADPCM用メモリが128KBだと勘違いしていて、実際には256KBもあることに気付いてしまったのが発端。ほら、メインメモリが64KBの時代だから、そんなにあるとは思わないじゃん(言い訳)。

「標準のサンプリングレート16kHzで32秒以上も録音できる!」
「フィルモアは48秒くらいだけど繰り返しがあるからいけるのでは?」

……と思ってやってみたら……前に調べた仕様だと微妙におさまらない。

となると、「サンプリングレートを下げる」か、「厳密には繰り返しでない部分を似たサンプルで埋めて引き延ばす」かの2択かなあ、というわけで今回のは前者(15kHzくらい)でおさめました。後者の方が本命だったのですが、その話は次回以降に。

元のサンプルはDAWで打ち込んだやつで、音色は全部HALionのプリセットをいじったものです。OPNAのFM音源では出せないような音にしようと分厚く重ねていたらゴワゴワになってしまった……。

それで、DAWから書き出したものを自前で15kHzくらいにサンプリングレート変換してからバラした部品をwavとして書き出して、MUCOM88 Windows付属のツールでADPCMに変換しています。wavファイル上のサンプリングレートは16kHzとして書き出して、ツール側のリサンプリングは回避しています。あとは、再生時に D-244o2b と、音程の指定で目的のサンプリングレートにしているというわけです。(再生時のサンプリングレートの話は前に書いた。)

細かい話としては、その「15kHzくらい」は、バラした部品の最小単位(8分音符の長さ)が64サンプルの倍数になるように決めているとか、DAWとmucom88でテンポが微妙に合わないので、ほんの少しストレッチして(というか変換時と再生時のレートを少し変えて)辻褄を合わせているとか、いろいろありますが、まあそこは適当でもそんなに変わらなかった気がします。