批量轉換與錄音


批量模式

DpdoEngine 支持通過腳本批量處理多個文件。雖然沒有專門的 --batch 參數,但可以通過 shell 循環輕鬆實現批處理。

Shell 批量轉換

Bash 示例 — 批量 FLAC → DSF:

#!/bin/bash
for f in *.flac; do
  DpdoEngine -i "$f" "${f%.flac}.dsf" --oversampling 128 --order 7
done

遞歸處理子目錄:

#!/bin/bash
find /music/pcm -name "*.flac" | while read f; do
  outdir="/music/dsd${f#/music/pcm}"
  mkdir -p "$(dirname "$outdir")"
  DpdoEngine -i "$f" "${outdir%.flac}.dsf" --oversampling 128 --order 7
done

多核並行轉換

利用 xargsGNU parallel 充分發揮多核 CPU 性能:

# 使用 xargs — 每批 4 個並行任務
find . -name "*.flac" -print0 | xargs -0 -n1 -P4 -I{} sh -c \
  'f="{}"; DpdoEngine -i "$f" "${f%.flac}.dsf" --oversampling 128 --order 7 -opencl'

# 使用 GNU parallel(推薦)
find . -name "*.flac" | parallel DpdoEngine -i {} {.}.dsf --oversampling 128 --order 7

提示: 配合 --opencl 參數,GPU 加速在多任務場景下尤爲高效。


管道模式(Pipe Mode)

--pipe 參數啓用管道輸入/輸出模式,允許 DpdoEngine 與其他命令行工具配合使用,構建靈活的處理流水線。

基本用法

# 從 stdin 讀取 PCM,輸出到 stdout
cat input.wav | DpdoEngine -i pipe output.dsf --oversampling 64 --pipe

# 配合 ffmpeg 構建處理鏈
ffmpeg -i source.flac -f wav - | DpdoEngine -i pipe output.dsf --oversampling 128 --pipe

管道鏈示例

多段處理鏈路:

# PCM 源 → 響度標準化 → 噪聲整形 → DSD 輸出
ffmpeg -i track.flac -f wav - | \
  DpdoEngine -i pipe track.dsf --oversampling 128 --order 7 --lufs -16 --pipe

配合 DpdoPlayer 實時監聽:

# 轉換的同時通過 DpdoPlayer 監聽
DpdoEngine -i input.flac output.dsf --oversampling 64 --pipe | DpdoPlayer - -vol 80

錄音模式(Record Mode)

DpdoEngine 支持直接從兼容的音頻接口錄製音頻。錄音模式的設計目標是實現從錄音到 DSD 格式的無損直錄。

基本錄音

# 開始錄音,輸出 DSF 文件
DpdoEngine --record recording.dsf

錄音參數選項

參數說明示例
--record啓用錄音模式(默認單聲道,按 q 停止)--record
--record-device NAME錄音設備名(默認系統默認設備)--record-device "USB Mic"
--record-samplerate HZ採集採樣率(0=自動)--record-samplerate 44100
--record-channels N採集聲道數(0=自動)--record-channels 2
--record-duration SEC自動停止時長(0=手動 q 停止)--record-duration 300
--record-buffer N幀緩衝(64–65536,默認 512)--record-buffer 512
--record-headroom DB峯值餘量 dB(默認 3.0)--record-headroom 3
--list-devices列出可用音頻設備--list-devices

輸出格式由輸出文件擴展名決定(.dsf / .dff)。

原生 DSD 錄製

對於支持原生 DSD 輸出的音頻接口,DpdoEngine 可以直接錄製 DSD 流(DoP 或 ALSA raw DSD):

# DoP 模式錄製(PortAudio,兼容性廣)
DpdoEngine --record-dsd --dsd-mode dop live.dsf

# Native 模式錄製(ALSA raw DSD_U32_BE,需設備支持)
DpdoEngine --record-dsd --dsd-mode native live.dsf

錄製的 DSD 流無需經過 PCM 中間格式轉換,直接從 ADC 獲取 PDM 比特流並打包爲 DSF 文件,確保了錄音環節的極致純淨。

錄音 + 實時監聽

錄音的同時通過 DpdoPlayer 實時監聽,零延遲:

# 錄音並實時監聽
DpdoEngine --record recording.dsf --pipe | DpdoPlayer - -vol 70

數據統計與日誌

統計數據

DpdoEngine -i input.wav output.dsf --oversampling 128 --stats

輸出統計信息包括: - 輸入/輸出採樣率 - 處理時間與利用率 - 峯值與 RMS 電平 - 噪聲底限 - 動態範圍

詳細日誌

默認情況下,DpdoEngine 會在終端輸出處理進度。若要保存日誌:

DpdoEngine -i input.wav output.dsf --oversampling 128 2>&1 | tee conversion.log

自動化腳本參考

全專輯轉換(帶元數據)

#!/bin/bash
# 批量轉換整張專輯,爲每首曲目添加元數據
ALBUM="Symphony No. 9"
ARTIST="Beethoven"
YEAR=2024

for f in *.flac; do
  TITLE="${f%.flac}"
  DpdoEngine -i "$f" "${f%.flac}.dsf" \
    --oversampling 128 --order 7 \
    --artist "$ARTIST" \
    --album "$ALBUM" \
    --title "$TITLE" \
    --year "$YEAR"
done

文件夾監聽 + 自動轉換

# 使用 inotifywait 監聽文件夾,新文件自動轉換
inotifywait -m /watch/folder -e close_write --format '%f' | while read f; do
  if [[ "$f" == *.flac || "$f" == *.wav ]]; then
    DpdoEngine -i "/watch/folder/$f" "/output/${f%.*}.dsf" --oversampling 64 --order 7
  fi
done

配合 DpdoPackSACD 一次性完成專輯打包

#!/bin/bash
# 批量轉換 → 打包 SACD ISO
for f in *.flac; do
  DpdoEngine -i "$f" "${f%.flac}.dsf" --oversampling 128 --order 7 \
    --artist "Artist" --album "Album" --title "${f%.flac}"
done

# 打包爲 SACD ISO
DpdoPackSACD --album "Album" --artist "Artist" -cover cover.jpg *.dsf