Para apresentar a defesa da minha dissertação de mestrado, eu precisava tocar executar um vídeo com áudio no computador e a audiência precisava escutá-lo.
Uma saída era, na hora do vídeo, colocar o meu fone de ouvido bem perto do microfone, de forma que fosse transmitido pela videoconferência. Fazendo isso, no entanto, perde-se muito na qualidade do áudio.
Com um pouco de pesquisa descobri que existe uma solução melhor:
- Criar um canal de áudio Virtual-1, que recebe o áudio das aplicações compartilhadas com a videoconferência. Este canal é ouvido por mim e pela audiência.
- Direcionar a saída de áudio Virtual-1 para meus fones de ouvido, de forma que eu possa ouvir os programas compartilhados.
- Criar um canal de áudio Virtual-2, que recebe o Microfone no qual eu falo e a saída de áudio Virtual-1, com os áudios compartilhados. Este canal é transmitido para a audiência.
- Direcionar a saída de áudio Virtual-2 para um microfone virtual, chamado Virtual-3, que pode ser utilizado pela plataforma de videoconferência Google Meet.
Dessa forma, em vez de enviar apenas o meu microfone para a videoconferência, envio a saída Virtual-3 que também contempla os programas compartilhados.
O sistema em uso
No meu caso, estava utilizando o Ubuntu Linux 18.04. Para configurar o computador dessa forma, fiz uso dos dois scripts a seguir:
- O primeiro configura o Pulse Audio para criar esses dispositivos de entrada e saída de áudio; e
- O segundo desfaz essa configuração.
pulse_setup.sh
#!/bin/bash
# This script sets up pulseaudio virtual devices
# The following variables must be set to the names of your own microphone and speakers devices
# You can find their names with the following commands :
# pacmd list-sources
# pacmd list-sinks
# Use pavucontrol to make tests for your setup and to make the runtime configuration
# Route your audio source to virtual1
# Record your sound (videoconference) from virtual2.monitor
# Unload
./pulse_unload.sh
set -e
MICROPHONE=${MICROPHONE:-"alsa_input.pci-0000_00_1b.0.analog-stereo"}
SPEAKERS=${SPEAKERS:-"alsa_output.pci-0000_00_1b.0.analog-stereo"}
#SPEAKERS=${SPEAKERS:-"alsa_output.pci-0000_00_03.0.hdmi-stereo"}
module_file="/tmp/pulseaudio_module_list.txt"
if ! pacmd list-sources | grep -P "^\s+name: <${MICROPHONE}>" >/dev/null; then
echo "ERROR: Microphone (source) \"${MICROPHONE}\" was not found" >&2
exit 1
fi
if ! pacmd list-sinks | grep -P "^\s+name: <${SPEAKERS}>" >/dev/null; then
echo "ERROR: Speaker (sink) \"${SPEAKERS}\" was not found" >&2
exit 1
fi
# Create the null sinks
# virtual1 gets your audio sources (mplayer ...) that you want to hear and share
# virtual2 gets all the audio you want to share (virtual1 + micro)
pactl load-module module-null-sink sink_name=virtual1 sink_properties=device.description="Compartilhar-Audio" | tee -a "${module_file}"
pactl load-module module-null-sink sink_name=virtual2 sink_properties=device.description="Intermediario" | tee -a "${module_file}"
# Now create the loopback devices, all arguments are optional and can be configured with pavucontrol
pactl load-module module-loopback source=virtual1.monitor sink="${SPEAKERS}" latency_msec=1 | tee -a "${module_file}"
pactl load-module module-loopback source=virtual1.monitor sink=virtual2 latency_msec=1 | tee -a "${module_file}"
pactl load-module module-remap-source source_name=virtual3 source_properties=device.description="Vmic" master=virtual2.monitor | tee -a "${module_file}"
pactl load-module module-loopback source="${MICROPHONE}" sink=virtual2 latency_msec=1 | tee -a "${module_file}"
# Make the default sink back to speakers
pactl set-default-sink "${SPEAKERS}"
pacmd set-default-source "virtual3"
pulse_unload.sh
#!/bin/bash
set -e
module_file="/tmp/pulseaudio_module_list.txt"
if [ ! -f "${module_file}" ]; then
echo "ERROR: file ${module_file} doesn't exist" >&2
exit 1
fi
while read -r module; do
if [[ "${module}" =~ ^[0-9]+$ ]]; then
pacmd unload-module "${module}"
else
echo "ERROR: file ${module_file} is not correctly formated" >&2
exit 1
fi
done < "${module_file}"
rm "${module_file}"
Boa tarde professor, o projeto ficou incrível, audaz d+ rs..
queria tirar umas dúvidas como Sr. como aqui não consigo postar imagens, achei o perfil do Sr. no Instagram e mandei mensagem rs. Parabéns pelo portal. Muito construtivo!
Olá! Vi sua mensagem. Que bom que tem curtido as postagens. Me alegra ver o seu interesse.
Acredito que a solução do problema que você citou pode ser encontrada usando pulse-audio, de forma semelhante ao que fiz com os dispositivos virtuais.
Desejo a melhor das sortes!