Batch Conversion & Recording
Batch Mode
DpdoEngine supports batch processing of multiple files via shell scripting. There is no dedicated --batch flag — a shell loop does the job easily.
Shell Batch Conversion
Bash example — batch FLAC → DSF:
#!/bin/bash
for f in *.flac; do
DpdoEngine -i "$f" "${f%.flac}.dsf" --oversampling 128 --order 7
done
Recursive processing of subdirectories:
#!/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
Multi-Core Parallel Conversion
Use xargs or GNU parallel to fully utilize multi-core CPUs:
# xargs — 4 parallel jobs per batch
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 (recommended)
find . -name "*.flac" | parallel DpdoEngine -i {} {.}.dsf --oversampling 128 --order 7
Tip: combined with
--opencl, GPU acceleration is especially efficient in multi-task scenarios.
Pipe Mode
--pipe enables stdin/stdout piping so DpdoEngine can be combined with other command-line tools to build flexible processing pipelines.
Basic Usage
# Read PCM from stdin, write to stdout
cat input.wav | DpdoEngine -i pipe output.dsf --oversampling 64 --pipe
# Chain with ffmpeg
ffmpeg -i source.flac -f wav - | DpdoEngine -i pipe output.dsf --oversampling 128 --pipe
Pipeline Examples
Multi-stage chain:
# PCM source → loudness normalization → noise shaping → DSD output
ffmpeg -i track.flac -f wav - | \
DpdoEngine -i pipe track.dsf --oversampling 128 --order 7 --lufs -16 --pipe
Real-time monitoring with DpdoPlayer:
# Convert and monitor through DpdoPlayer at the same time
DpdoEngine -i input.flac output.dsf --oversampling 64 --pipe | DpdoPlayer - -vol 80
Record Mode
DpdoEngine can record directly from compatible audio interfaces. The goal is lossless direct-to-DSD recording.
Basic Recording
# Start recording to a DSF file
DpdoEngine --record recording.dsf
Recording Options
| Parameter | Description | Example |
|---|---|---|
--record | Enable record mode (mono default, press q to stop) | --record |
--record-device NAME | Recording device name (default: system default) | --record-device "USB Mic" |
--record-samplerate HZ | Capture sample rate (0=auto) | --record-samplerate 44100 |
--record-channels N | Capture channels (0=auto) | --record-channels 2 |
--record-duration SEC | Auto-stop after SEC seconds (0=manual) | --record-duration 300 |
--record-buffer N | Frames per buffer (64–65536, default 512) | --record-buffer 512 |
--record-headroom DB | Headroom dB (default 3.0) | --record-headroom 3 |
--list-devices | List available audio devices | --list-devices |
Output format is determined by the output file extension (
.dsf/.dff).
Native DSD Recording
For audio interfaces with native DSD output, DpdoEngine records the DSD stream directly (DoP or ALSA raw DSD):
# DoP mode (PortAudio, broad compatibility)
DpdoEngine --record-dsd --dsd-mode dop live.dsf
# Native mode (ALSA raw DSD_U32_BE, requires device support)
DpdoEngine --record-dsd --dsd-mode native live.dsf
The recorded DSD stream never passes through a PCM intermediate format — the PDM bitstream goes straight from the ADC into a DSF file, keeping the recording chain maximally clean.
Record + Real-Time Monitoring
Record and monitor through DpdoPlayer simultaneously, zero latency:
DpdoEngine --record recording.dsf --pipe | DpdoPlayer - -vol 70
Statistics & Logging
Statistics
DpdoEngine -i input.wav output.dsf --oversampling 128 --stats
Reported statistics include: - Input/output sample rates - Processing time and utilization - Peak and RMS levels - Noise floor - Dynamic range
Verbose Logging
By default DpdoEngine prints progress to the terminal. To save a log:
DpdoEngine -i input.wav output.dsf --oversampling 128 2>&1 | tee conversion.log
Automation Script Reference
Full-Album Conversion (with metadata)
#!/bin/bash
# Batch-convert an entire album, adding metadata to each track
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
Folder Watch + Auto-Convert
# Watch a folder with inotifywait, convert new files automatically
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
One-Shot Album Authoring with DpdoPackSACD
#!/bin/bash
# Batch convert → author 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
# Author the SACD ISO
DpdoPackSACD --album "Album" --artist "Artist" -cover cover.jpg *.dsf