2017-08-08 1 views
1

Ich speichere eine FM-Station mit rtl_fm und sox in eine MP3-Datei. rtl_fm, um das Signal zu erfassen und sox es in mp3 zu transcodieren.Eine MP3-Datei wiedergeben, während sie geschrieben wird

rtl_fm -M wbfm -f 88.1M -d 0 -s 22050k -l 310 | sox -traw -r8k -es -b16 -c1 -V1 - -tmp3 - | sox -tmp3 - some_file.mp3 

Dann versuche ich diese Datei in einem zweiten Endgerät zu spielen, wie die mp3 mit geschrieben wird:

bis zu der Zeit spielt bis
play -t mp3 some_file.mp3 

Das Problem ist, dass es nur die mp3 hatte Zu der Zeit wurde der Wiedergabebefehl aufgerufen.

Wie bekomme ich es, um das angehängte MP3 im Laufe der Zeit zu spielen, während es geschrieben wird?

EDIT: Laufen auf Raspberry Pi 3 (Raspian Jessie), SDR NooElec R820T

Antwort

1

Es gibt ein paar Dinge hier. Ich glaube nicht sox unterstützt "tailing" eine Datei, aber ich weiß mplayer tut. Um jedoch eine bessere Kontrolle über die Pipeline zu haben, könnte die Verwendung von gstreamer der richtige Weg sein, da ein paralleler Ereignisstrom in seine Effektpipeline eingebaut ist.

Wenn Sie mit sox bleiben wollen, würde ich zuerst loswerden der redundanten zweiten Aufruf von sox, zB:

rtl_fm -M wbfm -f 88.1M -d 0 -s 22050k -l 310 | 
sox -ts16 -r8k -c1 -V1 - some_file.mp3 

Und um den Stream zu spielen, während es Umcodierung man könnte es multiplexen mit tee, zB:

rtl_fm -M wbfm -f 88.1M -d 0 -s 22050k -l 310 | 
tee >(sox -ts16 -r8k -c1 -V1 - some_file.mp3) | 
play -ts16 -r8k -c1 - 

Oder wenn Sie wollen, dass sie getrennte Prozesse sein:

# Save stream to a file 
rtl_fm -M wbfm -f 88.1M -d 0 -s 22050k -l 310 > some_file.s16 

# Encode stream 
sox -ts16 -r8k -c1 -V1 some_file.s16 some_file.mp3 

# Start playing the file at 10 seconds in 
tail -c+$((8000 * 10)) -f some_file.s16 | 
play -ts16 -r8k -c1 - 
+0

danke! Ich habe die Vorschläge ausprobiert und die redundanten Sox-Befehle entfernt. – spearna

+0

Ihr zweiter Vorschlag funktioniert, aber er erfüllt nicht die Funktion, die ich versuche, da er die Wiedergabe- und Aufnahmebefehle koppelt. Ich nehme das Radio-FM-Signal in eine MP3-Datei auf, indem ich die Befehlszeile rtl_fm/sox benutze. Mit einem separaten Befehl versuche ich dann, die (noch schreibende) mp3-Datei an einem vom Benutzer festgelegten Startpunkt der Datei abzuspielen. Dieser Befehl könnte unabhängig vom Befehl rtl_fm/sox record mehrmals aufgerufen werden, um den gewünschten Startpunkt zu erhalten. RECAP: 1 Aufnahmebefehl; n play command (s) – spearna

+0

Einige andere wichtige Informationen, die ich im ursprünglichen Beitrag vernachlässigte: Laufen auf Raspberry Pi 3 (Raspian Jessie), NooElec R820T SDR – spearna

Verwandte Themen