第13回1bit研究会でも発表した通り、webmasterは「現行DAC LSIはCDのPCMすら精密に再生できていない」という意見を持っています。
理論を発表したのに、オーディオ業界に1000人もいるwebmasterより有能なエンジニアは信じようとしません。 そこで、証明するためのアプリを用意しました。
CDDA相当のPCMデータから、精密にΔΣ(DSDと表現しても外れてはいない)のファイルを作るコマンドです。 同じDACで元のPCMデータと、変換後のΔΣデータを再生して聴き比べれば、DAC内部の処理精度の評価ができます。
2018年現在のWindowsマシン(Intel x86プロセッサ搭載)をターゲットにしました。 手っ取り早く作るために、コンソールアプリケーションです。 コマンドプロンプトを起動して、キーボードから引数を入力します。
第1引数は入力のWAVファイル名で、第2引数は出力のDSDIFFファイル名です。
入力には制限があります。 ファイル形式はWAVしか受け付けません。 サンプリング周波数、ビット長、チャネル数はそれぞれ、44.1kHz 16bit 2チャネルに限定しています。
出力にも制限があります。 必ず180秒のΔΣデータを出力します。 元ファイルが180秒よりも長かったら、後ろが切られます。 180秒よりも短かったら、終了後に無音が続きます。 180秒ちょうどだったら、FIRフィルタで処理する分、先頭に1/88秒のプリエコーが入ってその分末尾が切れます。
このプログラムは、以下の手順でCDDA相当のPCMをΔΣに変換します。
FIR演算で1秒間に(8191回の掛け算 + 8190回の足し算) × 2チャンネル × 352800回の演算をしているはずなのに、約1.5GFLOPSしか消費しません。 この辺の工夫を知りたい方はwebmasterまで有償で質問してもかまいませんが、KORG社やSONY社には「webmasterよりずっとSSE命令に詳しい」と豪語するエンジニアが沢山いますので、そちらに質問するほうがずっと良い答えが返ってくることでしょう。
バイナリは、自由に使っていただいてかまいません。 商用利用は困難だと思いますが、禁止しません。 再配布の際は、必ずオリジナルが置いてあるこの場所も紹介してください。
1bit系ではないマルチビットDACを使っている人のために、PCM出力機能を追加しました。 ファイル名の前に引数の形で出力フォーマットを指定します。 以下のコマンドで、浮動小数点形式のPCMを出力します。 サンプリング周波数は、352800Hzです。
wav44k2dsdiff.exe WAV352K 入力WAVファイル名 出力WAVファイル名 |
以下のコマンドで、サンプリング周波数176400Hzの浮動小数点形式のPCMを出力します。
wav44k2dsdiff.exe WAV176K 入力WAVファイル名 出力WAVファイル名 |
「うちは浮動小数点形式のPCMを再生できないよー」という人は、Audacityなどのフリーソフトでフォーマット変換をしてください。
ついでにΔΣ変調部分の変数初期化ロジックを変更しました。 出力されるノイズが減ったような気がするのですが、本当にノイズが減っているのならば、前回はCコンパイラのバグにあたっていたようです。
ΔΣ変調器をデバッグしました。 今まで、正しいソースコードをコンパイルしても誤動作していたので、止むなく誤差の大きい使い方をしていました。 正しい2次ΔΣ変調器をコンパイルできたので、バイナリを更新します。 音声信号のレベルが低くなった時に可聴帯域に発生するノイズが、従来ほど耳障りでなくなっているはずです。
2018年6月27日の改造で、バグを入れてしまいました。 それ以前のバージョンと同じ動作に戻します。
2018年3月22日 初出
2019年8月12日 バイナリ更新