Re: [pulseaudio-discuss] How to combine microphone audio and music from application to pipe to video conference
On Sun, May 31, 2020 at 09:56:10PM -0400, Samir Parikh wrote: > I've played with this a bit more to update my steps. I corrected some > errors and I think I was able to piece together some more steps but still > have a few open issues. Here's what I've got so far based on my revisions: > https://imgur.com/NzteBvg > > Step 1: Create the music_mic_mix virtual mixer > $ pacmd load-module module-null-sink sink_name=music_mic_mix > $ pacmd update-sink-proplist music_mic_mix device.description=music_mic_mix Looks good. To help out discovery later on, you can also run this command to give the monitor source a better name: $ pacmd update-source-proplist music_mic_mix.monitor device.description=music_mic_mix.monitor > Step 2: Create the mic_loop loopback module and specify the sink as the > virtual mixer created in step 1 (music_mic_mix) > $ pacmd load-module module-loopback sink=music_mic_mix If you want to be more automated, feel free to specify a source= here pointing to your microphone's source if you know it's name. You can figure out the correct name with the "pacmd list-sources" command. > Step 3: Create the music_only virtual mixer > $pacmd load-module module-null-sink sink_name=music_only > $ pacmd update-sink-proplist music_only device.description=music_only > > Step 4: Create the music_loop_headphones loopback module and specify my > headphones output as the "real sink". (I found the name using the pacmd > list-sinks command.) > $ pacmd load-module module-loopback > sink=alsa_output.usb-Plantronics_Plantronics_BT600.analog-stereo The source here can be specified. Since we're using the auto-monitor source from the music_only virtual sink, the format is virt_sink_name.monitor. For example: $ pacmd load-module module-loopback sink=alsa_output.usb-Plantronics_Plantronics_BT600.analog-stereo source=music_only.monitor > Step 5: Create the music_loop_videoconf loopback module and specify the > music_mic_mix created in step 1 as the sink > $ pacmd load-module module-loopback sink=music_mic_mix Same deal. Add "source=music_only.monitor" to the command. > Step 6: Connect the headset microphone to the mic_loop loopback module via > the "Recording" tab in pavucontrol. It's possible to skip this if you did what I mentioned in reply to step 2. > Step 7: Direct the output of Rhythmbox to the music_only virtual mixer > created in step 3 via the "Playback" tab in pavucontrol. Yep. > Step 8: Direct the output of the music_mix_mix virtual mixer created in > step 1 to the video conference application in the "Recording" tab of > pavucontrol. Yep. If you ran the extra command I mentioned in step 1, this should have the name music_mic_mix.monitor. Also, if the recording app doesn't try to muck with things, pulse will remember and re-apply your selection whenever the recording app is launched. > My question is how do I direct the output of the music_only virtual mixer > created in step 3 to the music_loop_headphones and music_loop_videoconf > loopback modules created in steps 4 and 5 (indicated by the red boxes in my > revised diagram)? Hopefully the above helped. While verifying that this works, I created the following shell script. You'd have to swap the hardware sink/source names, but it does work: #!/bin/bash # Step 1: music_mic_mix virt sink pacmd load-module module-null-sink sink_name=music_mic_mix pacmd update-sink-proplist music_mic_mix device.description=music_mic_mix pacmd update-source-proplist music_mic_mix.monitor device.description=music_mic_mix.monitor # Step 2: mic_loopback pacmd load-module module-loopback sink=music_mic_mix source=alsa_input.pci-_00_1b.0.analog-stereo # Step 3: music_only virt sink pacmd load-module module-null-sink sink_name=music_only pacmd update-sink-proplist music_only device.description=music_only pacmd update-source-proplist music_only.monitor device.description=music_only.monitor # Step 4: loopback for headphones pacmd load-module module-loopback sink=alsa_output.pci-_00_1b.0.analog-stereo source=music_only.monitor # Step 5: music loopback for videoconference recording input pacmd load-module module-loopback sink=music_mic_mix source=music_only.monitor # Step 6: already done in step 2. # Step 7: Play music to music_only virt sink # Step 8: Record from music_mic_mix.monitor ___ pulseaudio-discuss mailing list pulseaudio-discuss@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
Re: [pulseaudio-discuss] How to combine microphone audio and music from application to pipe to video conference
Sean Greenslade wrote on 5/24/20 1:44 AM: On Sat, May 23, 2020 at 11:49:54AM -0400, Samir Parikh wrote: Ok, I'm back after researching and trying some things a bit more. Sean Greenslade wrote on 5/16/20 1:23 AM: This is definitely possible entirely within pulseaudio. I'll go over the basic concepts here, then show an example. ... Now you can begin playing music, and in the Playback tab of pavucontrol move the music playback to the VirtualMixer. I got this far in following your instructions but got stumped on that last part about moving the music playback to the VirtualMixer. This screenshot shows my options for where to direct the Rhythmbox output: https://imgur.com/a/PRCYV3B If I select VirtualMixer, playback of the music continues but I can no longer hear it. Is there a way for me to also hear it through my own speakers/headset? This is possible, but adds some complexity to the setup. To hopefully make this easier to follow, I've made a little flowchart of all the components: https://dumbpic.link/manu/2020-05-23_pulse_diagram_mic_mix_with_mon.png Remember that pulseaudio draws a distinction between sources and sinks, and normally doesn't allow you to route a source to sink or vice-versa. So source components have a rounded face, and sink components have a pointed face. Certain endpoints are "exclusive," meaning that they can only have one thing connected to or from it. These points have a grey shading to indicate that property. Modules with a thick border are real hardware. Modules with a thin border are software. The dotted line around "auto monitor" refers to the fact that it is auto-created when a virtual sink is created. The thick lines connecting modules are the routings within Pulse. These routings can all be modified in realtime within pavucontrol. Hopefully this makes enough sense to help you to augment your script. For comparison, here's the flowchart for my original suggestion that does not let you monitor the music: https://dumbpic.link/manu/2020-05-23_pulse_diagram_mic_mix.png --Sean Hi All, I was finally able to get this work! Thanks to the help of Sean as well as following some of the steps on this site[1], I was finally able to pipe BOTH my microphone AND the music from Rhythmbox to Jitsi while also being able to hear BOTH the music and the incoming video conference audio on my headphones! That site also referenced a helpful Stack Exchange post[2] which also led me to this GitHug repository[3] which contained a sample script[4] which I modeled to create my own[5]. My pavucontrol settings can be found here[6]. Still lots to learn now about how to improve latency, etc. but feels good to have finally solved this. Thanks again to Sean and everyone on this list who chimed in to help! Samir [1] https://endless.ersoft.org/pulseaudio-loopback [2] https://askubuntu.com/questions/257992/how-can-i-use-pulseaudio-virtual-audio-streams-to-play-music-over-skype [3] https://github.com/toadjaune/pulseaudio-config [4] https://raw.githubusercontent.com/toadjaune/pulseaudio-config/master/pulse_setup.sh [5] https://pastebin.com/raw/vLaYmhCe [6] https://imgur.com/a/1wD0851 ___ pulseaudio-discuss mailing list pulseaudio-discuss@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss