ファミコンのDPCMで再生した音をシミュレートする
ファミコンの音源には、サンプリング音声を再生するDPCMチャンネルがあります。 用意した音声ファイルをサンプリングしてDPCMチャンネルから再生したときに、どのような音になるかをシミュレートするpythonスクリプトを書きました。
DPCMチャンネルの仕様は、こちらの記事を参考にしました。
FC音源とは (ファミコンオンゲンとは) [単語記事] - ニコニコ大百科
動作確認は、MacのPython 3.11.6 (homebrew)で行いました。ライブラリにnumpyを使っています。
(2023-12-04) ソースコードをPython 2からPython 3に変更しました。
スクリプト
https://github.com/uenewsar/famicom_dpcm
使い方
用意した音声ファイル(in.wav)から、DPCMチャンネルからの再生をシミュレートした音声ファイル(out.wav)を作るには、以下のコマンドを実行します。
$ python dpcm.py in.wav out.wav
ファミコンのDPCMチャンネルでは、再生音のサンプリング周波数を16個のなかから選択できます。再生音のサンプリング周波数は、デフォルト設定でもっとも高い33144Hzになります。再生音のサンプリング周波数を変更するには、-dsオプションで値(0-15)を指定します。この値とサンプリング周波数の対応は、スクリプトのusageメッセージに記載しています。
実際のファミコンでは、再生音のサンプリング周波数は小数になるようです。このスクリプトでは、wavファイルとして出力する関係上、再生時のサンプリング周波数は、整数に四捨五入しています。
例
例として、ドラム音を使って、DPCMチャンネルから再生した音を作ります。再生音のサンプリング周波数の設定は、デフォルト(33144Hz)です。
元のドラム音 Stream Loop01 by uenewsar | Listen online for free on SoundCloud
DPCMチャンネルからの再生音に変換した音 Stream Converted by uenewsar | Listen online for free on SoundCloud
ドラム音には、以下のサイトのものを使わせていただきました。
BGM・ジングル・効果音のフリー素材|OtoLogic