PCM-DSD_Converter v2

PCM WAV → DSD DSDIFF 変換ソフトウェア(現行版 v2.2.2)

概略

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

現行版は v2.2.2 です。v2.0.0 からの変更点と、v2.0.0・v2.1.0 との測定比較を本ページに掲載しています。C++ で実装した初代 PCM-DSD_Converter(2015〜2020)は別ページにあり、v1 と v2.0.0 の比較は本ページ下部にあります。

PCM-DSD_Converter v2.2.2(現行版)

v1 をゼロから作り直した v2 系の最新版です。15次ΔΣ変調器と、FIR/FFT アップサンプリング・L/R 変調を並列に実行する有界パイプラインは v2.0.0 から引き継いでいます。v2.1.0 からは、1bit の出力値を決めるときに現在を含む16サンプル分の候補を比べる先読み探索を使い、可聴帯域の雑音を下げています。演算はすべて倍精度浮動小数点(FP64)です。DSD レートは入力系列基準で、44.1kHz 系入力は 44.1kHz 系 DSD に、48kHz 系入力は 48kHz 系 DSD に変換されます。

PCM-DSD_Converter v2.2.2 メイン画面(4ファイルの一括変換中)
v2.2.2 のメイン画面(4ファイルを一括変換している途中)。ディザの設定欄はなくなりました。

v2.0.0 からの主な変更

使い方

ダウンロードした ZIP を展開し、フォルダ内の PCM-DSD_Converter_v2.2.2.exe を起動します。同じフォルダの _internal フォルダも実行に必要なので、EXE だけを別の場所へ移さないでください。WAV ファイルまたはフォルダをウィンドウへドラッグ&ドロップし(フォルダは再帰的に WAV を探索)、レートのプルダウンから DSD サンプリングレートを選んで「変換開始」をクリックすると、リストのファイルを順に変換します。出力先は「入力と同じフォルダ」か指定したフォルダです。変換中は「キャンセル」で中断できます。

仕様

品質の評価は 88.2kHz 入力から DSD64 への変換で行っています。ほかの入力レート・倍率でも変換はできますが、同じ評価はしていません。

動作環境

Windows 10/11 64bit 用です。動作は Windows 11(Intel Core Ultra 7 265K)で確認しています。高速な探索部を使うには AVX2・POPCNT・BMI1 に対応した CPU が必要です(Intel は Haswell 以降、AMD は Zen 以降の多くの CPU が該当します)。対応しない CPU でも変換はできますが、時間が長くなります。Python ソースからの実行も可能です(同梱 requirements.txt 参照。確認した Python は 3.15.0)。

ダウンロード

SHA-256: Windows 64bit 版 00899e1a62502021bf2b92fa3116cb80f4532316138e763622158ac13b2d5043、ソースコード 6f58aae978dff157a0c6f60ee0df36cb4e82bc8ae892725fa46cb8e1aa0e502b

バージョン

日付は各版を固定した日です。v2.0.0 は公開日を記載しています。

2.2.22026/10/20GUI のディザ設定を廃止し、常にディザをかけて変換。変換結果は v2.2.1(ディザあり)と同じ
2.2.12026/10/20変換を高速化(15秒の音源で v2.2.0 の約1.3倍)。出力は v2.2.0 とバイト単位で同じ
2.2.02026/10/19ディザを一次差分化し、可聴帯域の雑音を低減。探索部を書き直して高速化
2.1.02026/10/181bit 化に先読み探索(16サンプル、候補4本)を導入。出力名に版と倍率を追加し、GUI でも変換記録を保存
2.0.12026/10/1815次ノイズシェーパーの係数を変更
2.0.02026/06/13全面再実装(Python)。DSD16〜DSD2048・48kHz系対応、バッチ変換GUI、キャンセル対応

性能比較(v2.0.0 / v2.1.0 / v2.2.2)

同じテスト信号(1kHz / −6dBFS / 88.2kHz / 64bit float、5秒)を v2.0.0、v2.1.0、v2.2.2 でそれぞれ DSD64 に変換し、出力の1bit列をそのまま FFT 解析しました。各版とも乱数の seed を変えて2回(20260513 と 20260514)変換し、開始1.0〜3.0秒の1秒窓5個(0.5秒刻み)と左右 ch から得た計20個のスペクトル(sin8 窓、1Hz 分解能)を平均しています。ノッチ、トーンの除去、平滑化はしていません。図は見やすさのため、1/96 オクターブごとの最大値を結んでいます。v2.2.2 の出力は、この条件で v2.2.0・v2.2.1 とバイト単位で同じです。v2.0.0 の出力は、v2.0.0 のソースを v2.2.2 と同じ評価環境で実行して作りました。

可聴帯域(20Hz〜20kHz)

v2.0.0・v2.1.0・v2.2.2 の可聴帯域の雑音密度
可聴帯域の雑音密度(対数周波数軸)。v2.0.0(緑の破線)と v2.1.0(橙)は1kHz 以下でほぼ重なり、約 −245dB/Hz の床はディザの漏れで決まっています。v2.0.0 は3kHz 付近から上で雑音が増え、20kHz では約 −195dB/Hz に達します。v2.2.2(青)はディザの漏れが減ったぶん低い周波数ほど床が下がり、20〜100Hz では約 −305〜−315dB/Hz です。72Hz 付近の小さな山は v2.2.2 の出力に含まれる成分で、同じ周波数の v2.1.0 の床より約50dB低い水準です。1kHz のトーン(約 −19dB/Hz)は図の上端より上にあります。

全帯域(20Hz〜1.41MHz)

v2.0.0・v2.1.0・v2.2.2 の全帯域スペクトル
DSD64 の全帯域。20kHz より上の雑音は、ノイズシェーピングで可聴帯域の外へ移したものです。v2.1.0 と v2.2.2 の雑音は20kHz を過ぎると急に増え、25〜40kHz の平均は約 −84dB/Hz と、v2.0.0(約 −124dB/Hz)より約40dB 多くなっています。60kHz より上はどの版もほぼ同じです。約1.07MHz の離散的なアイドルトーンは3つの版に共通で、v2.1.0 以降は v2.0.0 より約3dB 低くなっています。
指標v2.0.0v2.1.0v2.2.2
非高調波ノイズ(20Hz〜20kHz)−166.7 dB−199.8 dB−203.8 dB
 20〜200Hz−222.3 dB−222.4 dB−280.1 dB
 200〜900Hz−216.3 dB−216.6 dB−262.1 dB
 1.1〜5kHz−204.2 dB−209.0 dB−248.9 dB
 5〜10kHz−193.6 dB−207.9 dB−239.6 dB
 10〜20kHz−166.7 dB−201.3 dB−203.8 dB
1kHz トーンのピーク(PSD)−19.4 dB/Hz−19.4 dB/Hz−19.4 dB/Hz

※ 非高調波ノイズは、1kHz とその高調波(各 ±5Hz)を除いた 20Hz〜20kHz の電力の合計です。20個の窓ごとに求めた電力を平均してから dB にしています。帯域ごとの値は、平均したスペクトルを同じ除外のうえで帯域内で合計したものです。値は ±1 をフルスケールとした電力(dB)です。

その他の入力

v2.2.0 の開発では、上のほかに無音、1kHz / −100dB、1kHz / 0dB(seed 8通り)、標本間ピークを含む高入力5種、短い13種の試験信号でも v2.1.0 と比べました。可聴帯域の非高調波ノイズはすべての入力で v2.1.0 より 3.2〜4.8dB 低く、信号の利得の差は 0.00dB、確定した出力での保護処理の発動や代替処理への切り替えは0件でした。観測数の少ない試験では、20kHz 付近の帯域で v2.1.0 より最大 3.8dB 高い結果も出ましたが、観測数を増やした 0dB の試験(144観測)と、未使用の seed による最終確認では、この帯域を含めて判定の基準(v2.1.0 比 +1dB 以内)に収まりました。v2.2.2 の出力はこれらの試験でも v2.2.0 とバイト単位で同じです。

まとめ

この試験信号では、v2.2.2 の可聴帯域の非高調波ノイズは v2.0.0 より約37dB、v2.1.0 より約4dB 低くなっています。v2.0.0 からの差の大部分は、10〜20kHz の雑音が減ったことによるものです。v2.1.0 からの差は、ディザの漏れが減って 10kHz 以下の雑音がほとんどなくなったことと、10〜20kHz の雑音が約2.5dB 減ったことによるもので、低い周波数ほど差が大きくなっています(20〜200Hz で約58dB)。その代わり、20kHz の少し上から約60kHz までの雑音は v2.0.0 より多くなっています。いずれも 1kHz / −6dBFS の単一の試験信号を DSD64 に変換した結果です。

変換速度

15秒の 1kHz / −6dBFS(88.2kHz / 64bit float)を DSD64 に変換する時間を、5つの版で交互に変換して測りました。各版とも2つの seed で3回ずつ、計6回の中央値です。測定は Intel Core Ultra 7 265K、Windows 11 で行い、Python ソースの変換処理だけを計時しています。EXE で変換するときは、これに起動と準備の約1.4秒(v2.2.1 での測定)が加わります。

v2.0.0〜v2.2.2 の変換時間
15秒の音源の変換時間(棒は中央値、横線は最小〜最大)。v2.0.0 は先読み探索を行わないため最も速く、約0.6秒で変換します。v2.1.0 で探索を導入して約6.4秒になり、v2.2.0 と v2.2.1 の高速化で約2.9秒(実時間の約5倍)まで短くなりました。v2.2.2 の変換処理は v2.2.1 と同じです。

速度は1台の PC での測定値です。CPU やコア数が異なると、ここに示した値とは変わります。

性能比較(v1 vs v2.0.0)

v2.0.0 の公開時に掲載した比較です。同じテスト信号(1kHz / -6dBFS / 88.2kHz / 64bit float)を v1(旧MFC版、8次楕円シェーパ)と v2.0.0(15次 dc15_signal_guard_best シェーパ)でそれぞれ DSD64 に変換し、出力DSDストリームを直接FFT解析して比較しました。通常のFFT平均では可聴帯域の差はトーン漏れに埋もれて見えないため、1kHzトーンをコヒーレントに除去してから倍々精度(double-double / twofold)FFTでノイズフロアを掘り下げる deep-spectrum 解析を使用しています(チャンネル mix、全長 29.72 秒、FFT長 4,191,264 = 0.673 Hz/bin)。

全帯域(20Hz〜1.41MHz)

v1 vs v2 deep-spectrum 全帯域ノイズフロア比較
DSD64 全帯域のノイズフロア(dBFS、対数軸、1kHzトーン除去)。可聴帯域では v2(青)が v1(赤)より 10〜20dB 以上低い。20kHz以上で v1 は約50kHzにノイズの山を持つが、v2 はなだらか。1MHz付近の盛り上がりはΔΣ変調のノイズシェーピングで、可聴帯域外。

可聴帯域の拡大(20Hz〜20kHz)

v1 vs v2 deep-spectrum 可聴帯域ノイズフロアの拡大
可聴帯域(20Hz〜20kHz)のノイズフロアを拡大。v2(青)の床は v1(赤)より約10〜25dB低く、4〜5kHz付近では約 -235dBFS まで落ちる。v1(赤)は約 -200dBFS で、楕円フィルタ特有の谷を持つ。1kHzトーン(-17dBFS)は上に振り切れている。

超高域の拡大(20kHz〜1.41MHz)

v1 vs v2 deep-spectrum 超高域ノイズシェーピングの拡大
超高域(20kHz〜Nyquist 1.41MHz)の拡大。v2(青)は v1(赤)の約50kHzの山を持たず、広帯域ノイズも数dB低い。ただし約1.06〜1.07MHzに離散的なアイドルトーンがあり、v2(約 -30dB)は v1(約 -37dB)より強い。いずれも可聴帯域より高い周波数の成分です。この測定では、DAC を通した再生出力への影響は評価していません。
指標v1(8次楕円)v2.0.0(15次 dc15)
1kHz トーンレベル(ch mix)-17.4 dB-17.5 dB
可聴帯域ノイズフロア中央値(2–15kHz)-203 dBFS-226 dBFS
低域ノイズフロア中央値(20–200Hz)-199 dBFS-211 dBFS
約50kHz ノイズピーク-64 dBFS-91 dBFS
アイドルトーン(約1.07MHz)-37 dB-30 dB

※ deep-spectrum は、1kHzトーンを時間領域で最小二乗フィットして除去 → コヒーレントFFT長+倍々精度FFTでトーン直下のノイズフロアまで観察する手法です(FFT Graph の「ディープスペクトル」モードと同じ)。dBFS は1bin当たりの振幅レベルで、両者とも同じFFT長 4,191,264 で測っています。この比較の数値は、上の v2.0.0 / v2.1.0 / v2.2.2 の比較(Welch 法の電力密度)とは単位と解析方法が異なるため、直接は比べられません。

まとめ

v2.0.0 は可聴帯域のノイズフロアを v1 より 10〜25dB 下げ、可聴帯域直上(約50kHz)のノイズの山も解消しています。1kHz のトーンレベルはほぼ同等です。一方、約1.07MHzのアイドルトーンは v2.0.0 の方がやや強く出ています。この比較は変換ファイルの解析であり、DAC を通した再生出力への影響は評価していません。本比較は 1kHz / -6dBFS の単一テスト信号での実測です。

ライセンス関連

本体はMITライセンスです。ソースコードは上のダウンロードから取得できます。以下のオープンソースソフトウェアを使用しています。各ライセンスの詳細は同梱の THIRD-PARTY-NOTICES.md および PySide6_LICENSES を参照してください。