duplex_record: mixando áudio do microfone e saída de áudio de um programa via P
Publicado por Luís Fernando C. Cavalheiro (última atualização em 07/04/2016)
[ Hits: 2.962 ]
Homepage: https://github.com/lcavalheiro/
Clicadores e servos da Canonical, aqui começa mais um Script do Dino® trazendo para todos vocês mais uma loucura qualquer do tempo em que os dinossauros eram vivos e o Sílvio Santos vendia o Carnê do Baú para eles.
No Script de hoje, vamos aprender como mixar o áudio do microfone com a saída de áudio de um programa via PulseAudio.
Mixagem é o procedimento pelo qual dois canais de áudio distintos se transformam em um único. Assim, com este Script você pode mixar o áudio do microfone com a saída de um outro programa (por exemplo, o VLC) e enviar a mixagem para um outro programa (seguindo o exemplo, enviar a mixagem pelo Hangouts para que um amigo possa escutar uma música que você esteja a reproduzir localmente).
COMO USAR
Usage
duplex_record [-c | -C | -L | -h | -v ] [ -m arg ] [ -l arg ]
Options
-c Required: create two virtual sinks
-C Required: delete virtual sink. Ignores -m and -l options
-m arg Optional: name virtual mic sink (default: Mic)
"arg" must be a single-word, no quotes, no special characters, string
-l arg Optional: name virtual line sink, (default: Line)
"arg" must be a single-word, no quotes, no special characters, string
-L Show GPLv3 licence abstract, ignores -m and -l options
-h Show this help, ignores -m and -l options
-v Show version and changelog info, ignores -m and -l options
In case -c, -C, -L, -h or -v being issued at same time, only the last one will be considered</div>
Escrevi em inglês porque isso pode ser útil não apenas para nós, Brasileiros.
COMO FUNCIONA
O Script do Dino® cria dois sumidouros virtuais (nomes padrão: Virtual_Mic e Virtual_Line), liga o monitor do segundo sumidouro virtual ao sumidouro padrão e ao primeiro sumidouro virtual via loopback, e então liga o primeiro sumidouro ao sumidouro padrão por loopback. Na prática, isso traça o seguinte mapa de áudio:
Microfone (l)
Saída de áudio de um programa ------> segundo sumidouro virtual (m)> primeiro sumidouro virtual (m)> sumidouro padrão
Legenda:
(l)> redirecionamento por loopback
(m)> redirecionamento pelo monitor
O truque aqui reside no uso sagaz e maroto dos monitores e dos loopbacks de sumidouros.
O monitor é um canal do sumidouro que permite que ele seja escutado por outro sumidouro (monitorado é o termo certo). Já o loopback é um canal do sumidouro que permite a gravação da saída de áudio daquele sumidouro.
Com este Script do Dino®, a saída do microfone padrão é enviado via loopback pro primeiro sumidouro virtual. Quando o programa é instruído a usar o segundo sumidouro virtual como sua saída de áudio (via pavucontrol), envia-se o loopback do monitor tanto para a saída padrão de áudio (para permitir que você escute o que está sendo reproduzido) quanto para o primeiro sumidouro virtual. Assim, o primeiro sumidouro virtual recebe ao mesmo tempo o microfone e o segundo sumidouro virtual. Para direcionar o resultado dessa mixagem para algum programa que aceite entrada de áudio (desde o Audacity até o Google Hangouts), basta apenas configurar, via pavucontrol, o programa que receberá o áudio para usar o monitor do primeiro sumidouro virtual (o PulseAudio não permite gravação direta de sumidouros virtuais).
#!/bin/bash
#
# duplex_record Copryright (C) 2016 Luís Fernando Carvalho Cavalheiro
# Licence: GPLv3 (see below)
# Short description: this script creates two virtual sinks in PulseAudio and
# configures them to allow correct recording of an audio output (for example,
# a game) and an audio input (for example, a microphone) at same time.
#
# ------------------------------- Legal notice -------------------------------
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Tradução não-oficial:
#
# Este programa é um software livre; você pode redistribuí-lo e/ou
# modificá-lo dentro dos termos da Licença Pública Geral GNU como
# publicada pela Fundação do Software Livre (FSF); na versão 3 da
# Licença, ou (na sua opinião) qualquer versão.
#
# Este programa é distribuído na esperança de que possa ser útil,
# mas SEM NENHUMA GARANTIA; sem uma garantia implícita de ADEQUAÇÃO
# a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a
# Licença Pública Geral GNU para maiores detalhes.
#
# Você deve ter recebido uma cópia da Licença Pública Geral GNU junto
# com este programa. Se não, veja <http://www.gnu.org/licenses/>.
#
# ------------------------------- Legal notice -------------------------------
#
# Check for pavucontrol
which pavucontrol > /dev/null 2>&1
status_which=$?
if [ $status_which -ne 0 ] ; then
echo "duplex_record needs pavucontrol installed! Please install it before running duplex_record!"
exit 1
fi
# Define funcionts
version_info() {
cat << EOF
Copyright(C) 2016 Luís Fernando Carvalho Cavalheiro
Licenced under GPLv3. Please run "$ duplex_record -l" to read licence abstract
duplex_record: simple script to allow simultaneous recording of two different
audio outputs or inputs. Since PulseAudio sinks config is easier
done using pavucontrol, this script checks if it is installed
and stops running if pavucontrol can't be found.
Version: 0.1 (20160324)
Script finalized. Basic tests done, published on
http://www.vivaolinux.com.br under "scripts" session
EOF
}
open_pavucontrol() {
read -e -n 1 -p "Do you want to run pavucontrol to configure audio inputs and outputs (Y/N)? " open_pavucontrol
case $open_pavucontrol in
[Yy] )
pavucontrol &
;;
[Nn] )
echo "Please remember to manually run pavucontrol to configure audio inputs and outputs!"
;;
* )
echo "Invalid option! Please answer Y or N."
open_pavucontrol
;;
esac
}
create_virtual_sinks() {
pactl load-module module-null-sink sink_name=first_out sink_properties=device.description="Virtual_$DUPLEX_MIC" > /dev/null && echo "Virtual sink \"Virtual_mic\" created! Please use pavucontrol to point your desired recording devices to it"
pactl load-module module-null-sink sink_name=second_out sink_properties=device.description="Virtual_$DUPLEX_LINE" > /dev/null && echo "Virtual sink \"Virtual_line\" created! Please use pavucontrol to point all outputs you want to record to it."
# Loopback second virtual sink to default output
pactl load-module module-loopback source=second_out.monitor > /dev/null
# Loopback second virtual sink to first virtual sink
pactl load-module module-loopback source=second_out.monitor sink=first_out > /dev/null
# Loopback first virtual sink to default output
pactl load-module module-loopback sink=first_out > /dev/null
open_pavucontrol
}
remove_virtual_sinks() {
pactl unload-module module-loopback > /dev/null
pactl unload-module module-null-sink > /dev/null
echo "All virtual sinks removed! Please run pavucontrol to check your audio inputs and outputs."
open_pavucontrol
}
licence_text() {
cat << EOF
Copyright(C) 2016 Luís Fernando Carvalho Cavalheiro
Licenced under GPLv3. Please run "$ duplex_record -l" to read licence abstract
duplex_record: simple script to allow simultaneous recording of two different
audio outputs or inputs. Since PulseAudio sinks config is easier
done using pavucontrol, this script checks if it is installed
and stops running if pavucontrol can't be found.
Generic Public Licence, version 3, abstract:
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
EOF
}
help_text() {
cat << EOF
Copyright(C) 2016 Luís Fernando Carvalho Cavalheiro
Licenced under GPLv3. Please run "$ duplex_record -l" to read licence abstract
duplex_record: simple script to allow simultaneous recording of two different
audio outputs or inputs. Since PulseAudio sinks config is easier
done using pavucontrol, this script checks if it is installed
and stops running if pavucontrol can't be found.
Usage
duplex_record [-c | -C | -L | -h | -v ] [ -m arg ] [ -l arg ]
Options
-c Required: create two virtual sinks
-C Required: delete virtual sink. Ignores -m and -l options
-m arg Optional: name virtual mic sink (default: Mic)
"arg" must be a single-word, no quotes, no special characters, string
-l arg Optional: name virtual line sink, (default: Line)
"arg" must be a single-word, no quotes, no special characters, string
-L Show GPLv3 licence abstract, ignores -m and -l options
-h Show this help, ignores -m and -l options
-v Show version and changelog info, ignores -m and -l options
In case -c, -C, -L, -h or -v being issued at same time, only the last one will be considered
EOF
}
# Eval command line options
while getopts ":m:l:cCLhv" opt ; do
case "$opt" in
c)
ACTION="c"
;;
C)
ACTION="C"
;;
L)
ACTION="l"
;;
h)
ACTION="h"
;;
v)
ACTION="v"
;;
m)
DUPLEX_MIC=$OPTARG
;;
l)
DUPLEX_LINE=$OPTARG
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
esac
done
# Shows help text if no option is provided
if [ $OPTIND -eq 1 ] ; then
cat << EOF
duplex_record requires at least one valid option!
EOF
ACTION="h"
fi
# Do as defined for last option among -c, -C, -l and -h
case $ACTION in
c)
DUPLEX_MIC=${DUPLEX_MIC:-Mic}
DUPLEX_LINE=${DUPLEX_LINE:-Line}
create_virtual_sinks
;;
C)
remove_virtual_sinks
;;
l)
licence_text
;;
h)
help_text
;;
v)
version_info
;;
esac
Aplica quotas a partir de um arquivo gerado pelo repquota.
Script para autenticar usuario ip fixo speedy
shradio.sh - ouça rádios online
Checar tamanho do Cache do Squid e limpar
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Warcraft II Remastered no Linux? (7)
O programa assinador digital (5)









