中級者向け

DSDファイルをコマンドから簡単再生する方法

DSDファイルの再生はまだまだ普及していないのが現実です。
昨今だとコルグのオーディオゲートがGUI的にも取り扱いがしやすいかと思います。

10Rを購入すると付属でついてきますし、再生だけであれば無料版でも使えたと思います。

本日の記事では、DSDファイルを再生する方法として、コマンドで簡単に再生だけする方法をシェア。

Homebrewでffmpegを導入するコマンド

ここから先はM1チップ搭載のMac(macOS Monterey以降を想定)での環境で記事を作成していますがWindowsのコマンドでも同様の処理でOKです。

brew install ffmpeg

この記事でのやり方は、基本的にFFmpegに入っているffplay というシンプルなメディアプレーヤー機能を使うことで実現します、以下のような役割を果たします。

  • FFmpeg のライブラリ (libavcodeclibavformat など) を内部的に使って各種フォーマット(DSF/DFF を含む)をデコード
  • デコード後の PCM データをそのまま再生エンジン(CoreAudio など)にストリーム
  • 高品質リサンプリングやフィルタは FFmpeg の設定で自動的に適用

つまり、「FFmpeg の再生機能をコマンドラインで呼び出すもの」が ffplay です。

これは結局のところPCM再生になります。

DSDからPCMに変換してしまう方法もありますが、実際に変換するには、かなり精度の高いノイズシェイビングをプログラムする必要があります。

DSDは1ビットストリームに高域ノイズを移動させて解像度を確保する方式であるため、DSDからPCMへ変換する際、必ず20kHz以上をカットするデシメーションフィルタが必要となります。

ところが、このカットする帯域は微調整が必要ですので、ささっとコードをシェアしてできるものではないため、今回はコマンドでデコードストリームの方法を取りました。

ただ、基本的にはデコードストリームが手っ取り早く、中身の確認などの際にはオーディオゲートなどよりも素早く取り扱いできますので、おすすめです。

DSDファイルを再生するコマンド例

ffplay -nodisp -autoexit "あなたのパス.dsf"

-nodisp:映像ウィンドウを開かず、音声のみを再生します
-autoexit:再生終了後に自動でプロセスを終了します

ダブルクォート:パスにスペースや日本語が含まれる場合でも正しく認識されます。

Windowsの場合は

ffplay -nodisp -autoexit "C:\あなたのパス.dsf"

ウインドウオプション

ffplay は内部でSDLライブラリを使って「表示用のウィンドウ(SDLウィンドウ)」を開き、動画フレームやオーディオの波形/スペクトラム表示を行います。

たとえ音声ファイルだけを再生する場合でも、ウィンドウが立ち上がって自動的に「波形」や「周波数スペクトラム」を表示するのがデフォルト挙動です。

ffplay /path/to/file.dsf

で、波形ウインドウも表示されますが、簡易的なものなので、基本はnodispで問題ないかと思います。

デフォルトサンプリング周波数は?

サンプリング周波数をしていないのにデコードストリームと言われても困りますよね。

基本的にffplay(内部的には FFmpeg)で DSD ファイルを再生するとき、DSD の1-ビットストリームはまず PCM にデコードされますが、その際の PCM サンプリングレートは DSD 元レートの1/8 に自動設定されます。

  • 典型的な DSD64(64×44.1 kHz=2 822.4 kHz)の場合
    → 2 822.4 kHz ÷ 8 = 352.8 kHz の PCM ストリームとして再生される
  • DSD128(128×44.1 kHz=5 644.8 kHz)の場合
    → 5 644.8 kHz ÷ 8 = 705.6 kHz の PCM ストリームとして再生される

これは FFmpeg のデフォルト動作で、Spek などで「352.8 kHz まで帯域がある」と表示されるのも同じ理由です。

もし実際のストリームレートを確認したければ、下記のように ffprobe を使うと再生用 PCM のサンプルレートがわかります:

ffplay -nodisp -autoexit /あなたのパス.dsf -vf showinfo  2>&1 | grep "Stream.*Audio"
Stream #0:0: Audio: dsd_lsbf_planar, 352800 Hz, stereo, fltp, 5644 kb/s

サンプリング周波数を指定する

ffplay でも内部で使われている aresample フィルタを通して「再生時にサンプリングレートを例えば96 kHzに指定」できます。

ただし、ビット深度については ffplay 自体は内部で浮動小数点(float)に変換してから再生するため、純粋な「24bit 整数」での出力指定はできません。

その代わり、以下のようにサンプリングレートだけを変更して再生すると、96 kHz 相当のデータが流れます。

ffplay \
  -nodisp -autoexit \
  -af "aresample=out_sample_rate=96000:resampler=soxr" \
  "あなたのパス.dsf"

もしどうしても「24bit 整数PCM」で出力したい場合は、一度 ffmpeg で変換してパイプで ffplay に渡す方法がありますが、ノイズシェイビングをかけないと、砂嵐のような状態で再生されることになりますので、やはりデコードストリームがおすすめです。

一時停止などの操作

  • 一時停止/再開
    • p キー
    • スペースキー
      いずれかを押すと再生が一時停止し、もう一度押すと再開します。
  • 再生終了
    • q キー
    • Esc キー
      いずれかを押すと即座に再生を止めて ffplay を終了します。
朝比奈幸太郎

音楽家:朝比奈幸太郎

神戸生まれ。2025 年、40 年近く住んだ神戸を離れ北海道・十勝へ移住。
録音エンジニア五島昭彦氏より金田式バランス電流伝送 DC 録音技術を承継し、 ヴィンテージ機材で高品位録音を実践。
ヒーリング音響ブランド「Curanz Sounds」でソルフェジオ周波数音源を配信。
“音の文化を未来へ”届ける活動を展開中。