SimpleScreenRecorder: Record audio with ALSA only (no Pulseaudio, no JACK)
I’ve started recording video game sessions a while ago, since I think they’re fun. Needless to say that I don’t want to just see the screen, but also hear and record the game.
The problem with this is: A screen recording application always takes control of the sound card. Using ALSAs default settings, I can either hear the audio of the game or record it. So in order to record the audio stream, I would have to play muted.
First, I’ve tried different approaches:
– glc. As it seems, this program is not being developed anymore and it just works with OpenGL. Ancient DirectDraw games can not be recorded with this.
– PulseAudio. Yeah, I really installed this junk on my computer, hoping that the system was improved in the last years. I was very wrong. The attempt to access my internal sound card (VT1705) resulted in PulseAudio crashing. Granted, it could access my external one (CM6206), but I already had enough of it. Thanks Lennart Poettering, your software is making the Linux world way more complicated than it should be.
Finally, I found SimpleScreenRecorder. Although it is listing ALSA devices in the interface, they didn’t work. All of them. Of course, this program has been written with Pulseaudio in mind, too…
But I was lucky, because ALSA has a loopback interface. This is basically a virtual sound card. It creates to devices, Loopback 1 and Loopback 2. I can throw everything I want into one side and it comes out at the other.
The virtual devices can be created with this command:
modprobe snd_aloop pcm_substreams=1
So I took my original .asoundrc as a base and put this code at the bottom:
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 ] }
After that, I changed the segment pcm.softvol in a way, that every audio is routed through the split device by default:
pcm.softvol { type softvol slave { pcm "split" }
Done! Now the SimpleScreenRecorder has a new device in the list, called ” (Loopback-Aufnahme)”. Using this, I can record the audio of my games while playing them.
Would you describe a simpler configuration for those of us who only want to record what is coming out of a single dmix or hw device?