asoundrc (1805B)
1 defaults.ctl.!card Unity 2 3 pcm.!default { 4 type plug 5 slave.pcm { 6 type asym 7 playback.pcm "audio-out" 8 capture.pcm { 9 @func getenv 10 vars [ CAPTURE_DEV ] 11 default "loopback-in" 12 } 13 } 14 } 15 16 pcm.audio-out { 17 type route 18 19 slave.pcm { 20 type multi 21 22 slaves.a { pcm "desktop-out"; channels 2; } 23 slaves.b { pcm "loopback-out"; channels 2; } 24 25 bindings.0 { slave a; channel 0; } 26 bindings.1 { slave a; channel 1; } 27 bindings.2 { slave b; channel 0; } 28 bindings.3 { slave b; channel 1; } 29 } 30 31 ttable.0.0 1 32 ttable.1.1 1 33 ttable.0.2 1 34 ttable.1.3 1 35 } 36 37 pcm.desktop-out { 38 type dmix 39 40 ipc_key 1024 41 ipc_key_add_uid true 42 43 slave { 44 pcm "hw:Unity,0" 45 rate 48000 46 period_time 0 47 period_size 1024 48 buffer_size 4096 49 } 50 } 51 52 pcm.loopback-out { 53 type dmix 54 55 ipc_key 1024 56 ipc_key_add_uid true 57 58 slave { 59 pcm "hw:Loopback,0,0" 60 rate 48000 61 period_time 0 62 period_size 1024 63 buffer_size 4096 64 } 65 } 66 67 pcm.loopback-in { 68 type dsnoop 69 70 ipc_key 1025 71 ipc_key_add_uid true 72 73 slave { 74 pcm "hw:Loopback,1,0" 75 rate 48000 76 channels 1 77 period_time 0 78 period_size 1024 79 buffer_size 4096 80 } 81 } 82 83 # TODO: mix microphone-in with loopback-in? 84 pcm.microphone-in { 85 type dsnoop 86 87 ipc_key 1026 88 ipc_key_add_uid true 89 90 slave { 91 pcm "hw:Device_1,0" 92 rate 48000 93 channels 2 94 period_time 0 95 period_size 1024 96 buffer_size 4096 97 } 98 } 99 100 #https://noisybox.net/blog/2016/01/alsa_recording_of_device_output 101 #https://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html 102 #https://wiki.archlinux.org/title/Advanced_Linux_Sound_Architecture 103 #https://unix.stackexchange.com/questions/629348/what-exactly-is-the-default-pcm-alsa-device 104 #https://stackoverflow.com/questions/43939191/alsa-how-to-duplicate-a-stream-on-2-outputs-and-save-system-configs 105 #https://bootlin.com/blog/audio-multi-channel-routing-and-mixing-using-alsalib/