PCM-DSD_Converter

概略

PCM-DSD_ConverterはPCM WAVフォーマットの音源をDSD DSDIFFフォーマットに変換するプログラムです。PCM16bit~64bitFloat/44.1~768kHからDSD16-DSD2048への変換が出来ます。

使い方

1PCM-DSD_Converter.exeをダブルクリックし、立ち上がったウィンドウに対して、処理をするWAVファイルをドラッグドロップをします。フォルダをドラッグドロップした場合、再帰的にWAVファイルを探索します。

2.リストにドロップドラッグしたファイルが表示されます。プルダウンメニューから希望するDSDのサンプリングレートを選び、処理をするファイルを選択し、「実行」をクリックします。Ctrl+クリックで複数選択できます。
なお、PCMのフォーマットは44.1~768kHz/16,24,32bitInt,32,64bitFloatをサポートしているつもりです。DSDへは44.1kHz系列、48kHz系列それぞれのサンプリングレートに変換されます。

各種ボタンの動作は以下の通りです。
・全てを実行
リストに表示されている全てのファイルに対して処理を実行します。
・全てを削除
リストに表示されている内容を削除します。実ファイルは削除されません。
・実行
選択されているファイルに対して処理を実行します。
・削除
選択されているファイルをリストから削除します。実ファイルは削除されません。

3.正常に処理が完了すると、その旨が表示されたダイアログが出ます。また、正常に処理が完了したファイルはリストから削除されます。

処理されたファイルは出力先の設定がされていない場合、PCM-DSD_Converterがあるフォルダ内に保存されます。フォルダ名は元ファイルの名前で、ファイル名は元ファイルに_DSD+サンプリングレートが追加されます。

アルゴリズム

PCMのサンプリングレートがDSDのサンプリングレートになるまで、2倍ずつアップサンプリングした後、ノイズシェーピングし、1bitにしています。ノイズシェーピングには8次楕円フィルタを用いています。アップサンプリング時の折り返しノイズ遮断のためのフィルタを、高精度ではFIRフィルタ、低精度ではIIRフィルタを用いています

現在把握している不具合

・マルチチャンネルには対応しておりません。処理は正常に実行されたように表示されますが、結果は出たらめです。
・DSD512以上はやや発振しやすいです

バージョン

1.0.0.1 2015/05/23 関係者内リリース
1.0.0.2 2015/05/24 SNSで公開
1.0.0.3 2015/05/26 Webページで公開,膨大な一時ファイルを作らないようにした,あまり高速にならないので、CPU拡張命令を使うのをやめた,64bit版を作った
1.0.0.4 2015/05/27 出力先を選べるようにした,int32の壁にぶち当たるのを回避した
1.0.0.5 2015/05/30 低精度を追加した
1.0.0.6 2015/07/01 ノイズシェーピングフィルタの係数を自分で作った
1.0.0.7 2015/07/02 一部機器で再生できない不具合を修正
1.0.0.8 2015/11/28 特殊文字へ対応
1.0.0.9 2016/01/29 DSD16,DSD32追加,ノイズシェーピングフィルタの係数を外部ファイルから読むようにした
1.0.0.10 2016/09/30 2GB以上のWAVファイルを読み込めなかった問題を修正。

ダウンロード

32bit版ではDSD2048時のタップ数が使用メモリの関係上2047に制限されます。もし、自分で書き換えてタップ数増やす場合には64bit版をお使いください。

PCM-DSD Converter v1.0.0.10 64bit版
PCM-DSD Converter v1.0.0.10 32bit版

また、起動時にエラーが出るようでしたら、VC++ 2015再頒布パッケージの32bit|64bitをインストールしてください。
https://www.microsoft.com/ja-JP/download/details.aspx?id=48145

ライセンス関連

FFTライブラリにはFFTW3を用いています。よってソースコードは公開します。
https://github.com/serieril/PCM-DSD_Converter

性能比較



おまけ

PCMto2xPCM時の折り返し歪み遮断のためのフィルタの係数は自分で変えることが可能です。
FIRフィルタはFIRFilter.datから読んでおり、TAP数は2^N-1でフォーマットは
TAP数K
h(1)
h(2)

h(K)です。

IIRフィルタはIIRFilter.datから読んでおり、Direct Form II方式2次直列型フィルタです。
フォーマットは https://ccrma.stanford.edu/~jos/fp/Direct_Form_II.html を参考にして
次数N

a0
a1
a2
b0
b1
b2

a0
a1
a2
b0
b1
b2

…です。