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 に変換されます。
v2.0.0 からの主な変更
- 先読み探索による1bit化(v2.1.0)。各時点の1bitをその時点の値だけで決めるのではなく、現在を含む16サンプル分の 0/1 の並びを候補として4本保持しながら比べ、可聴帯域に重みを付けた誤差が最も小さくなる並びを選びます。あわせて v2.0.1 で15次ノイズシェーパーの係数を替えました。この2つの変更で、1kHz / −6dBFS の入力では可聴帯域の非高調波ノイズが v2.0.0 より約33dB下がりました(下の性能比較)。一方、20kHz の少し上から約60kHz までの雑音は v2.0.0 より多くなり、計算量が増えたぶん変換にも時間がかかります。
- ディザの一次差分化(v2.2.0)。量子化に加える振幅 2−24 の微小な乱数(ディザ)の一部が、ノイズシェーピングを受けずに出力へ漏れていました。ディザを一様乱数 ξ の一次差分 d[n] = (ξ[n] − ξ[n−1]) / √2 に変えて漏れを減らし、20〜200Hz の雑音は v2.1.0 より約58dB下がりました。
- 変換の高速化(v2.2.0、v2.2.1)。AVX2 命令で動く探索部分を書き直しました。探索部分の最適化は出力を変えずに行っています。ディザの変更も含む各版の変換時間は、15秒の音源で v2.1.0 が約6.4秒、v2.2.2 が約2.9秒です。
- ディザ設定の廃止(v2.2.2)。GUI からディザのチェックボックスをなくし、常にディザをかけて変換するようにしました。品質の評価はすべてディザありの状態で行っているので、評価した状態でだけ変換できるようにしたものです。v2.2.1 を既定のまま(ディザあり)使った場合と出力は同じです。
- 出力ファイル名と変換記録(v2.1.0)。出力名は「元ファイル名_v2.2.2_DSD64.dff」のように版と倍率を含みます。変換条件を記録した「…_manifest.json」も同じフォルダに保存します。
使い方
ダウンロードした ZIP を展開し、フォルダ内の PCM-DSD_Converter_v2.2.2.exe を起動します。同じフォルダの _internal フォルダも実行に必要なので、EXE だけを別の場所へ移さないでください。WAV ファイルまたはフォルダをウィンドウへドラッグ&ドロップし(フォルダは再帰的に WAV を探索)、レートのプルダウンから DSD サンプリングレートを選んで「変換開始」をクリックすると、リストのファイルを順に変換します。出力先は「入力と同じフォルダ」か指定したフォルダです。変換中は「キャンセル」で中断できます。
仕様
- 入力: WAV 44.1kHz 系 / 48kHz 系(16/24/32bit 整数・32/64bit float、ステレオ。モノラルはステレオ複製)
- 出力: DSDIFF (.dff)、DSD16〜DSD2048(DSD サンプリングレート = 入力系列の基準レート × 倍率)
- 1bit 化: 先読み探索(現在を含む16サンプル、候補4本)
- ノイズシェーピング: 15次
- ディザ: 一様乱数の一次差分、振幅 2−24(GUI では常に有効)
- 演算: 倍精度浮動小数点(FP64)。探索部は AVX2 対応のネイティブコードで、使えない CPU では同じ計算の Numba 版に自動で切り替わります(出力は同じで、時間は長くなります)
- FIR/FFT アップサンプリングと L/R 変調のマルチスレッド並列処理
- CLI モードあり:
PCM-DSD_Converter_v2.2.2.exe --cli input.wav output.dff --dsd 128(--gainで入力ゲイン、--helpで一覧。評価用にディザを無効にする--no-ditherもあります)
品質の評価は 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.2 | 2026/10/20 | GUI のディザ設定を廃止し、常にディザをかけて変換。変換結果は v2.2.1(ディザあり)と同じ |
| 2.2.1 | 2026/10/20 | 変換を高速化(15秒の音源で v2.2.0 の約1.3倍)。出力は v2.2.0 とバイト単位で同じ |
| 2.2.0 | 2026/10/19 | ディザを一次差分化し、可聴帯域の雑音を低減。探索部を書き直して高速化 |
| 2.1.0 | 2026/10/18 | 1bit 化に先読み探索(16サンプル、候補4本)を導入。出力名に版と倍率を追加し、GUI でも変換記録を保存 |
| 2.0.1 | 2026/10/18 | 15次ノイズシェーパーの係数を変更 |
| 2.0.0 | 2026/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)
全帯域(20Hz〜1.41MHz)
| 指標 | v2.0.0 | v2.1.0 | v2.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 での測定)が加わります。
速度は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)
可聴帯域の拡大(20Hz〜20kHz)
超高域の拡大(20kHz〜1.41MHz)
| 指標 | 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 を参照してください。