Ich habe versucht, ein virtuelles Gerät zu erstellen, um das interne Audio meiner Soundkarte mit reinem ALSA aufzunehmen. Nachdem ich viel .asoundrc
gegoogelt hatte, fand ich eine Datei¹, die sehr nahe an dem liegt, wonach ich suche:
pcm.mycard {
type hw
card 0
}
ctl.mycard {
type hw
card 0
}
pcm.myconvert {
type plug
slave {
pcm "myrecord"
format S16_LE
}
}
pcm.myrecord {
type file
format "raw"
slave.pcm "mycard"
file "| oggenc -Q -q6 -r -B %b -C %c -R %r -o /tmp/record-$(date +%%Y-%%m-%%d_%%H%%M%%S).ogg -"
}
pcm.!default{
type asym
playback.pcm "myconvert"
capture.pcm "mycard"
}
Diese Konfiguration ermöglicht das Aufzeichnen einer ogg
Datei mit allen auf meinem Computer abgespielten Audiodaten. Was ich jetzt tun möchte, ist, den pcm.myrecord
Teil der Konfiguration so zu ändern , dass das Audio in einer virtuellen Karte "gestreamt" wird, die ich später mit beispielsweise aufnehmen könnte arecord
. Ich würde mich freuen, wenn mir jemand dabei helfen könnte.
Ich habe Folgendes versucht: Wie erstelle ich ein virtuelles ALSA-Gerät, von dem aus ich alles aufzeichnen kann, was abgespielt wird? aber das hat bei mir nicht funktioniert. Unten die Ausgabe von arecord -L
:
muammar@zarathustra /tmp
% arecord -L !10015
null
Discard all samples (playback) or generate zero samples (capture)
default:CARD=PCH
HDA Intel PCH, CS4208 Analog
Default Audio Device
sysdefault:CARD=PCH
HDA Intel PCH, CS4208 Analog
Default Audio Device
front:CARD=PCH,DEV=0
HDA Intel PCH, CS4208 Analog
Front speakers
dmix:CARD=PCH,DEV=0
HDA Intel PCH, CS4208 Analog
Direct sample mixing device
dsnoop:CARD=PCH,DEV=0
HDA Intel PCH, CS4208 Analog
Direct sample snooping device
hw:CARD=PCH,DEV=0
HDA Intel PCH, CS4208 Analog
Direct hardware device without any conversions
plughw:CARD=PCH,DEV=0
HDA Intel PCH, CS4208 Analog
Hardware device with all software conversions
default:CARD=Loopback
Loopback, Loopback PCM
Default Audio Device
sysdefault:CARD=Loopback
Loopback, Loopback PCM
Default Audio Device
front:CARD=Loopback,DEV=0
Loopback, Loopback PCM
Front speakers
surround21:CARD=Loopback,DEV=0
Loopback, Loopback PCM
2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=Loopback,DEV=0
Loopback, Loopback PCM
4.0 Surround output to Front and Rear speakers
surround41:CARD=Loopback,DEV=0
Loopback, Loopback PCM
4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=Loopback,DEV=0
Loopback, Loopback PCM
5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=Loopback,DEV=0
Loopback, Loopback PCM
5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=Loopback,DEV=0
Loopback, Loopback PCM
7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
dmix:CARD=Loopback,DEV=0
Loopback, Loopback PCM
Direct sample mixing device
dmix:CARD=Loopback,DEV=1
Loopback, Loopback PCM
Direct sample mixing device
dsnoop:CARD=Loopback,DEV=0
Loopback, Loopback PCM
Direct sample snooping device
dsnoop:CARD=Loopback,DEV=1
Loopback, Loopback PCM
Direct sample snooping device
hw:CARD=Loopback,DEV=0
Loopback, Loopback PCM
Direct hardware device without any conversions
hw:CARD=Loopback,DEV=1
Loopback, Loopback PCM
Direct hardware device without any conversions
plughw:CARD=Loopback,DEV=0
Loopback, Loopback PCM
Hardware device with all software conversions
plughw:CARD=Loopback,DEV=1
Loopback, Loopback PCM
Hardware device with all software conversions
Vielen Dank.
Antworten:
Ich habe dieses Problem wie folgt gelöst:
Laden Sie zuerst das
snd-aloop
Modul:Dadurch wird ein neues Gerät mit dem Namen erstellt
Loopback
:Aus den oben gezeigten Informationen müssen wir zwei
hw
Geräte erstellen :hw:0,0
(PCH ist meine Hauptsoundkarte).hw:2,1
(DasLoopback
virtuelle Gerät).Normalerweise haben
hw
Geräte die Form :hw:X,Y
. Für unsere Zwecke scheint es, dassY
für die Hauptkarte immer ist,0
während für dieLoopback
wirY
gleich sind1
.Damit all dies funktioniert, benötigen wir eine
~/.asoundrc
Datei mit den folgenden Angaben :Ändern Sie
hw:X1,Y1
mit den Werten für Ihre Hauptkarte (in meinem Fallhw:0,0
).Sie können testen, ob diese Konfiguration funktioniert, indem Sie etwas auf Ihrem Computer abspielen. Wenn Sie es hören, ist es in Ordnung. Lassen Sie uns nun etwas auf dem Computer abspielen und es von diesem virtuellen Gerät aufnehmen mit
ffmpeg
:Wo
hw:X2,Y2
mussLoopback
in diesem Fall durch das Gerät ersetzt werdenhw:2,1
.Ich nehme an, dass die Verwendung auch
arecord
funktionieren sollte.quelle
Ich habe die Anweisung befolgt und es funktioniert wie erwartet mit einer Ausnahme: Wenn eine Anwendung als Chrome-Soundkarte nach einer anderen Zugriff auf die Loopback-Schnittstelle erhält, schlägt dies fehl. Zum Beispiel beginne ich mit der Aufnahme auf Loopback:
Dann öffne ich den Browser (es ist wichtig, einen neuen Prozess zu starten) und öffne dann ein Video. Nach solchen Schritten gibt es zwei mögliche Ergebnisse (ich weiß nicht, worauf es ankommt). Erstes Szenario: Ich kann keine Stimme hören und arecord nimmt nichts auf. Zweites Szenario: Ich kann nicht einmal ein Video abspielen und es wird eine Meldung angezeigt, dass der Browser nicht auf das Audiogerät zugreifen kann.
Wenn ich den Browser zum ersten Mal öffne und ein Video wiedergebe und dann mit der Aufnahme beginne, erhalte ich immer das erwartete Ergebnis: Ich kann Sprache hören (Routing zur Soundkarte funktioniert) und Daten werden in der Datei gespeichert (Routing zum Loopback funktioniert ebenfalls).
@muammar Hast du auch solche Probleme gehabt?
quelle