venerdì 27 luglio 2018

Appunti su DSD con GQRX e RTL-FM in Linux

Sistemando il Thinkpad con Ubuntu Linux, dopo la prematura dipartita del Chromebook.

DSD, il software originale per la decodifica del DMR, ha bisogno di audio campionato a 48000 Hz. Su alcuni pc / schede audio che lavorano a 44100 l'esecuzione fallisce con questo messaggio:
Error message: Invalid sample rate
Il problema si può aggirare utilizzando padsp, un wrapper pensato per mantenere compatibilità con i device audio legacy di Linux che si occupa anche del necessario resampling.
>padsp dsd
Digital Speech Decoder 1.7.0-dev (build:v1.6.0-86-g7ee04e5)
mbelib version 1.3.0
Audio In/Out Device: /dev/audio
La tecnica funziona anche quando vogliamo alimentare DSD direttamente da GQRX o RTL_FM per l'impiego con la nostra SDR preferita.
Esempi:

=== con GQRX, dopo aver attivato lo stream UDP ===
socat stdout udp-listen:7355 | padsp dsd -i -
=== RTL-FM ===
rtl_fm -f 145.125M -M fm -g 100 -s 70K -r 48K -E dc| padsp dsd -fr -i –

Bonus track: quando non esiste il device /dev/audio e/o il sample rate non è compatibile, anche il flag -n per disattivare l'output sugli altoparlanti non viene riconosciuto, anche se la scheda audio non verrebbe impiegata in alcun modo.
>socat stdout udp-listen:7355 | dsd -i - -n
Digital Speech Decoder 1.7.0-dev (build:v1.6.0-86-g7ee04e5)
mbelib version 1.3.0
Disabling audio output to soundcard.
Error, couldn't open /dev/audio
2018/07/27 08:45:23 socat[3592] E read(1, 0x55ba6bcafbc0, 8192): Bad file descriptor
Per ovviare al problema basta, nello stile Unix, usare come output il device NULL:
socat stdout udp-listen:7355 | dsd -i - -o /dev/null