SimpleScreenRecorder: Ton nur mit ALSA aufnehmen (kein Pulseaudio/JACK)
Seit einiger Zeit habe ich Gefallen daran gefunden, Videospiele aufzunehmen. Dabei möchte ich natürlich nicht nur das Spiel sehen, sondern auch die Audioausgabe mit aufnehmen.
Das Problem an der Sache ist: Ein Aufnahmeprogramm belegt die Soundkarte. Ich kann mit ALSA standardmäßig entweder den Ton des Spieles hören oder ihn aufnehmen. Wenn ich ihn aufnehmen will, müsste ich also stumm spielen.
Ich habe zunächst verschiedene Sachen ausprobiert:
– glc. Anscheinend wird dieses Programm aber nicht mehr weiterentwickelt und funktioniert nur mit OpenGL. Uralte DirectDraw-Spiele nimmt es nicht auf.
– PulseAudio. Ja, ich habe tatsächlich diesen Krebs auf meinem Rechner installiert, in der Hoffnung das System hätte sich inzwischen verbessert. Doch weit gefehlt. Beim Versuch auf meine interne Soundkarte zuzugreifen (VT1705) schmierte Pulseaudio ab. Meine externe Soundkarte wurde zwar erkannt (CM6206), aber das war mir dann doch zu nervig. Danke Lennart Poettering, deine Software macht die Linuxwelt wirklich viel schlechter als sie sein müsste.
Ich landete beim SimpleScreenRecorder. Dieser listet zwar ALSA-Geräte auf, die funzen jedoch alle nicht. Geschrieben wird das Programm -natürlich- mit PulseAudio im Hinterkopf.
Doch zum Glück gibt es ein Loopback-Interface in ALSA, also eine virtuelle Soundkarte. Diese erzeugt zwei Geräte, Loopback 1 und Loopback 2. Was ich auf der einen Seite reinschmeiße, kommt auf der anderen Seite raus.
Die virtuelle Karte kann man mit diesem Befehl erzeugen:
modprobe snd_aloop pcm_substreams=1
Ich habe also meine ursprüngliche .asoundrc als Basis genommen und dieses Zeug ans Ende gepackt:
pcm.loopsnoop { type dsnoop ipc_key 321456 # any unique value hint { show on description "(Loopback-Aufnahme)" } slave { pcm "hw:3,1,0" #Loopback.2 channels 2 #rate 48000 } }
pcm.split { type plug slave { pcm { type multi slaves { a { channels 2 pcm "upmix" } #sound card (default/hw:x,x) b { channels 2 pcm "hw:3,0,0" } #Loopback.1 } bindings { 0 { slave a channel 0 } # Left 1 { slave a channel 1 } # Right 2 { slave b channel 0 } # left 3 { slave b channel 1 } # right } } #rate 48000 } ttable [ [ 1 0 1 0 ] # left [ 0 1 0 1 ] # right ] }
Danach änderte ich den Abschnitt pcm.softvol so um, dass der Ton standardmäßig über das Split-Gerät geleitet wird:
pcm.softvol { type softvol slave { pcm "split" }
Fertig! Nun zeigt mir der SimpleScreenRecorder das Gerät ” (Loopback-Aufnahme)” an und ich kann mit Ton zocken und diesen aufnehmen:
Dieser Beitrag hat einen Kommentar