@Schrolli,
das wird so nix.
Ich denke mal Python kommt da mit dem Timing nicht nach.
Habe da schon einiges an Lehrstunden ;-) investiert.
Bei mir funktioniert das so, fast perfekt:
Ich nutze dafür das snd_aloop Device.
Sollte unter Raspian verfügbar sein.
Auf meinem Banana Pi habe ich mir selbst einen Kernel mit aloop gebaut.
1. Mache mal ein "modprobe snd-aloop" und schaue mal mit "aplay -l" ob Du ein Loopback Device hast.
2. Erstelle Dir folgende .asoundrc (bei mir liegt die unter /root/)
Code:
pcm.dsnooped {
type dsnoop
ipc_key 2048
ipc_perm 0666
slave {
pcm "hw:Loopback,1"
channels 1
rate 22050
}
}
3. Jetzt kannst Du hiermit das Signal einspeisen:
Code:
rtl_fm = subprocess.Popen("sudo rtl_fm -d "+str(deviceid)+" -f "+str(frequenz)+"M -M fm -s 22050 -l " + str(squelch) + " -p "+str(ppmerror)+" \
-E DC -F 0 -g 50 | AUDIODEV=plughw:Loopback,0 play -t raw -r 22050 -e signed-integer -b 16 -c1 -V1 -q -",
stdout=subprocess.PIPE,
stderr=open(LogString_rtl_fm,'a'),
shell=True)
Und hiermit in den multimon-ng wieder einspeisen:
Code:
multimon_ng = subprocess.Popen("sudo arecord_multimonng" +str(deviceid)+ " -r 22050 -D plug:dsnooped -c 1 -f S16_LE -t wav | \
multimon-ng" +str(deviceid)+ " "+str(demod1)+" "+str(demod2)+" "+str(demod3)+" -f alpha -t raw -",
stdout=subprocess.PIPE,
stderr=open(LogString_multimonng,'a'),
shell=True)
Einen Record mache ich hiermit:
Code:
record = subprocess.Popen("sudo arecord_memo" +str(deviceid)+ " -D plug:dsnooped -f S16_LE -r 22050 -c 1 -d " + str(zvei_RecTime) + " -t raw | lame --scale 10 -s 22050 -r -m mono -b 16 --cbr --resample 48k --lowpass 4 --tt '" + ID3 + "' - " + zvei_RecPath + memolink_zvei,
stdout=subprocess.PIPE,
stderr=open(LogString_memo,'a'),
shell=True)
Das funktioniert so eigentlich ganz gut. Nur nach ca. 12-24 Stunden,
hängt sich der rtl_fm weg. In den Logfiles steht aber kein Fehler.
Eventuell läuft da irgend ein Buffer voll.
Ich habe mir hierfür ein Python WatchDog Script geschrieben.
Damit werden alle Dienste dann durch gestartet.
Momentan experimentiere ich mit dem "tee" Befehl.
Damit starte ich alles vom Bash und splitte den Stream zum
multimon-ng (hier wird ein Python-Filter-Script mit aufgerufen)
und in das snd-aloop Device.
Das läuft so jetzt schon 3 Tage durch !!!!
Gruß
Marcel