Wie zeichnet man die Audioausgabe auf Raspbian auf?

2146
vtni

Auf meinem Raspberry Pi führe ich einige Python-Dateien aus, die Sound (Pygame) erzeugen. Ich möchte diese Klänge aufnehmen, während sie abgespielt werden.

Dies sind die Ausgänge der aufgelisteten Geräte von arecord:

pi@raspberrypi:~ $ arecord -l **** List of CAPTURE Hardware Devices **** card 1: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM] Subdevices: 8/8 Subdevice #0: subdevice #0 Subdevice #1: subdevice #1 Subdevice #2: subdevice #2 Subdevice #3: subdevice #3 Subdevice #4: subdevice #4 Subdevice #5: subdevice #5 Subdevice #6: subdevice #6 Subdevice #7: subdevice #7 card 1: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM] Subdevices: 8/8 Subdevice #0: subdevice #0 Subdevice #1: subdevice #1 Subdevice #2: subdevice #2 Subdevice #3: subdevice #3 Subdevice #4: subdevice #4 Subdevice #5: subdevice #5 Subdevice #6: subdevice #6 Subdevice #7: subdevice #7 

Ich habe verschiedene Optionen ausprobiert arecord, um die abgespielten Sounds aufzunehmen, aber es war nicht möglich, die System-Sounds aufzunehmen. Ist das überhaupt nicht möglich oder gibt es eine andere Lösung?

0
Laufen Sie Pulseaudio? Wenn ja, gibt es eine einfachere Lösung. Wenn nicht, wie haben Sie die Loopback-Geräte konfiguriert? Haben Sie die Python-Dateien so konfiguriert, dass das andere Ende des Loopback-Geräts für die Wiedergabe verwendet wird? Oder haben Sie dies in Ihrem `.asoundrc` als Standard festgelegt? dirkt vor 7 Jahren 0
Ich habe `modprobe snd_bcm2835` verwendet, bevor ich die Sounds über Python abgespielt habe vtni vor 7 Jahren 0

1 Antwort auf die Frage

2
dirkt

Sie haben nicht gesagt, nehmen jedoch an, dass Sie Pulseaudio nicht verwenden. Tun

ps axu | grep pulse 

um sicherzustellen, dass Sie Pulseaudio wirklich nicht ausführen. Wenn Sie dies tun, funktioniert Folgendes nicht.

Sie modprobe snd_bcm2835haben das in der Frage angezeigte Loopback-Gerät nicht erstellt. Also, irgendwo hast du eine modprobe snd-aloop, entweder hast du es getan und vergessen, oder es ist in irgendeiner Konfiguration.

Um dies zu überprüfen, führen Sie beide aus aplay -lund arecord -lsollten in beiden Fällen zwei Geräte auf Karte 1 anzeigen.

Lassen Sie uns nun testen, ob das Loopback-Gerät funktioniert. Suchen Sie nach einer großen WAV-Datei (z. B. 'music.wav'), öffnen Sie zwei Terminals und machen Sie das

aplay -vv -D hw:1,0,0 music.wav 

in einem Terminal und danach

arecord -vv -D hw:1,1,0 -f S16_LE -r 44100 -c 2 /dev/null 

in dem anderen. Die Parameter müssen mit dem Format Ihrer WAV-Datei übereinstimmen. Sie sollten eine VU-Anzeige sehen, um aplaysich synchron mit der VU- Anzeige für zu bewegen arecord.

Schließlich weisen Sie Ihre Python-Programme hw:1,0,0als Tonausgabegerät an, jedoch funktionieren Ihre Python-Programme und die dazu erforderlichen Informationen.

Oder machen Sie einen ~/.asoundrc(pro Linux-Benutzer) oder /etc/asound.conf(systemweit) mit Einträgen wie

pcm.!default { type hw card 1 }  ctl.!default { type hw card 1 }  

Vorausgesetzt, das snd-aloopwird immer auf Karte 1 geladen und kreuzen Sie Ihren Finger, den Ihre Python-Programme defaultals Standardausgabe verwenden.

Dann können Sie vom anderen Ende des Loopback-Geräts wie oben beschrieben aufnehmen.

Hinweis: Dies ist eine virtuelle "Soundkarte". Sie hören keine Sounds, die über diese "Karte" abgespielt und aufgenommen wurden. Wenn Sie gleichzeitig hören und aufnehmen möchten, empfehle ich Ihnen, Pulseaudio einfach auszuführen. Das macht das viel einfacher.

Vielen Dank! Ich habe nicht herausgefunden, wie es für Python funktioniert, aber der erste Test war erfolgreich :) Ist es auch möglich, die Audioausgabe zu "klonen"? Eigentlich möchte ich den Ton auf den Lautsprechern hören und sollte auch aufgenommen werden. vtni vor 7 Jahren 0
Ich bin nicht sicher, wie ich die Ausgabe unter ALSA in zwei Geräte "klonen" soll. Es * könnte * mit einigen "asoundrc" -Magie funktionieren, die die gleichen IPC-Schlüssel für das Plugin verwenden, aber ich bin zu faul zum Testen. Wie gesagt: Pulseaudio installieren, einfach vom "Monitor" -Ausgang deiner Spüle aufnehmen, fertig. Viel einfacher zu konfigurieren. dirkt vor 7 Jahren 1