Frage an die Experten - Subprozess mit "tee"
Verfasst: Mittwoch 25. März 2015, 19:42
Hallo,
ich habe mir mit einem Raspberry Pi (Linux), einem DVB-T Stick
und ein bisschen Python
einen Funkdecoder gebaut.
Momentan funktioniert folgender Codeschnippsel:
Momentan wird der Audiostream des DVB-T-Sticks direkt in den Decoder (multimon_ng) gespeist.
Ich würde das Audiosignal aber gerne abgreifen und zusätzlich auf einen Lausprecher geben.
Das funktioniert in der Command Line ohne Probleme so:
Leider bekomme ich das so nicht als Subprozess im Pythonscript zum Laufen.
Das Script läuft dann ohne Fehlermeldung mit 100% CPU-Last, funktioniert aber nicht.
Ich habe es schon mit einem zweiten Subprozess probiert. (stdin=rtl_fm.stdout)
Dann ist das Timing aber so lang, das kein vernünftiges Audio-Signal mehr raus kommt.
Kann mir dabei jemand helfen?
Danke
Gruß
Marcel
ich habe mir mit einem Raspberry Pi (Linux), einem DVB-T Stick
und ein bisschen Python
Momentan funktioniert folgender Codeschnippsel:
Code: Alles auswählen
multimon_ng = subprocess.Popen("rtl_fm -d 0 -f XXX.XXXM -M fm -s 22050 -l 0 -p 5 -E DC -F 0 -g 40 | multimon-ng -a POCSAG512 -f alpha -t raw /dev/stdin",
stdout=subprocess.PIPE,
stderr=open(LogString_multimonng,'a'),
shell=True)
try:
while True:
line = multimon_ng.stdout.readline()
multimon_ng.poll()
# ab hier wird decodiertIch würde das Audiosignal aber gerne abgreifen und zusätzlich auf einen Lausprecher geben.
Das funktioniert in der Command Line ohne Probleme so:
Code: Alles auswählen
rtl_fm -d 0 -f XXX.XXXM -M fm -s 22050 -l 15 -p 5 -E DC -F 0 -g 40 | tee >(multimon-ng -a POCSAG512 -f alpha -t raw /dev/stdin) >(AUDIODEV=plughw:3,0 play -t raw -r 22050 -e signed-integer -b 16 -c1 -V1 -q -) > /dev/nullDas Script läuft dann ohne Fehlermeldung mit 100% CPU-Last, funktioniert aber nicht.
Ich habe es schon mit einem zweiten Subprozess probiert. (stdin=rtl_fm.stdout)
Dann ist das Timing aber so lang, das kein vernünftiges Audio-Signal mehr raus kommt.
Kann mir dabei jemand helfen?
Danke
Gruß
Marcel