Ergebnis 1 bis 15 von 301

Thema: multimon (der Vorgänger des monitord) auf Raspberry Pi

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registriert seit
    02.01.2002
    Beiträge
    105
    @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

  2. #2
    Registriert seit
    18.03.2015
    Beiträge
    67
    Super, Danke!
    Werde das morgen mal testen.

    Wenn ich das richtig verstehe, leitest du die Daten also in eine virtuelle Soundkarte, von der dann multimon und das record wieder abgreift, ist das so korrekt?

    Gruß

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 4 (Registrierte Benutzer: 0, Gäste: 4)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •