PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : snd_aloop Auf einem Raspberry Pi...



felix000
07.01.2018, 15:58
Hallo zusammen,

hat jemand ein Anleitung wie ich auf einem Raspberry Pi 3 mit einer Soundkarte sowohl die Auswertung (mit monitord) als auch eine zeitweise Aufzeichnung (mit sox/rec) realisieren kann?

Testweise spiel' ich grad mit 2 USB-Soundkarten, die das gleiche Eingangssignal kriegen...aber das kann doch nicht die richtige Lösung sein...

nepomuck
16.01.2018, 17:39
Hallo Felix,

Ich bastle gerade an einem Auswerter mit RTL_SDR und multimon_ng. Das monitord-Projekt ist ja leider nicht weiter entwickelt worden.
Auf dem PC funktioniert das bereits gut. Ich nutze lediglich ALSA und den alsamixer, um Audio-Out auch als Input zu schalten.

Dann "füttere" ich in einem Terminal das Funksignal in den Mixer (und damit auch auf die Lautsprecher)
<code>
rtl_fm -f [frequenz]-l80 | aplay -r 24000 -f S16_LE -t raw -c 1
</code>
In einem anderen Terminal läuft dann die Auswertung
<code>
arecord -f S16_LE -c1 -r22050 -t raw | multimon-ng -t raw -a FMSFSK -a ZVEI1 -f alpha -
</code>
und diese Ausgabe pipe ich dann in ein Skript, welches die Ausgabe filtert, korrigiert und in Abhängigkeit des Outputs aufnahmen startet:
<code>
if [ dies, das, jenes ]
then
arecord -f S16_LE -c1 -r22050 -t raw -d $rectime | lame -r -s 22.05 -m m -b 64 - "$almtime-$schleife.mp3" &
fi
</code>

Auf dem PC klappt das bislang prima. Auswerter und Aufnahme laufen parallel.

Auf den von mir getesteten ARM-Kleincomputern
- Banana PI
- Odroid C2
Kriege ich den Alsamixer aber nicht dazu, den Audio-Output auf den Input zu Routen. Der C2 hat gar keine passende Soundkarte und der Banana kann's nicht.

Ich probiere als nächstes billige USB-Soundkarten. Da hängt dann zwar nichts dran, aber sie können evtl das interne Out to In Routing übernehmen -- und wenn nicht, kann man immer noch ein physisches Loop-Kabel von Out zu In legen.
Im Alsa Projekt gäbe es eine Dummy-Karte, aber mit der habe ich es bislang nicht ans Laufen bekommen.

Und ich schau mal, ob es ein Raspberry Pi 3 vielleicht besser hin bekommt, als der Banana und der Odroid oder ob virtual Mixer/cable wie Pulsaudio und Jack das besser machen, als Alsa.

Andreas

nepomuck
18.01.2018, 09:49
Hallo Felix,

Ich habe dein Problem wie folgt auf dem Banana Pi gelöst. Das soltle sich aber auch auf einem Raspberry Pi so machen lassen:
Ich nutze dazu den Pulseaudio Server.

Installation:
<code>
aptitude install pulseaudio pulseaudio-utils
</code>
oder auch
<code>
apt-get install pulseaudio pulseaudio-utils
</code>

Danach in der ALSA-Konfig den Pulseaudio Server als default Device festlegen:
/etc/asound.conf
<code>
pcm.pulse { type pulse }
ctl.pulse { type pulse }
pcm.!default { type pulse }
ctl.!default { type pulse }
</code>

Wenn Pulseaudio läuft, rufst du eine Liste deiner Devices ab:
<code>
> pacmd list-sources | grep -e device.string -e 'name:'
name: <alsa_output.platform-1c22c00.codec.analog-stereo.monitor>
device.string = "0"
name: <alsa_input.platform-1c22c00.codec.analog-stereo>
device.string = "hw:0"
</code>

Aus dieser Liste suchtst du die Soundkarte, deren Line-IN du verwenden willst (den .monitor Eintrag) und setzt diese Karte als Default Input in der Konfiguration vom Pulseaudio-Server ein:
Einfach in /etc/pulse/default.pa am Ende:
<code>
set-default-source alsa_output.platform-1c22c00.codec.analog-stereo.monitor
</code>
Hinzufügen, oder wie auch immer deine Soundkarte heisst.

Dann mit alsamixer den richtigen Input-Pegel einstellen.
Jetzt kannst du mit mehreren Tasks simultan lesend auf den Input zugreifen, ohne das Device explizit angeben zu müssen.

Zum Testen beispielsweise folgendes eingeben:
<code>
arecord -f S16_LE -c1 -r22050 -d 30 test_1.wav & \
arecord -f S16_LE -c1 -r22050 -d 30 test_2.wav
</code>
Dann müsste der Pi simultan den Sound vom Input in beide wav-dateien 30 Sekunden lang aufnehmen.

In der Praxis könntest du dann einen Decoder-Task und einen Record-Task parallel laufen lassen oder vom Decoder aus den Record anstossen.

viele Grüße,
Andreas