ALSA: como alterar temporariamente o dispositivo de saída

15

Quero fazer a coisa mais simples possível no ALSA: ter fones de ouvido USB produzindo som em vez do alto-falante interno do meu tablet. Não quero alterar os arquivos de configuração, como asound.rcou alsa.confou, asound.confe definir permanentemente os fones de ouvido como dispositivo de saída padrão, alterando a ordem dos dispositivos. Quero um efeito temporário, apenas até desconectar os fones de ouvido. Estranhamente, não consigo encontrar a resposta no Google. É alsamixercapaz de fazer isso (parece que não)?

No Gnome, você pode facilmente selecionar o dispositivo de saída atual PulseAudio, na interface GUI ou na CLI, mas PulseAudioele funciona sobre o ALSA! Então, eu também me pergunto, como isso força a ALSA a mudar o dispositivo de saída?

Boris Burkov
fonte
alsamixerpossui uma opção "Selecionar placa de som" na interface, embora eu não saiba se isso também define o dispositivo de saída.
Goldilocks
1
Não, infelizmente, apenas exibe os parâmetros desta placa de som e permite ajustá-los, mas não redirecionar a saída para isso
Boris Burkov
Olá, você pode tentar o exec a alsamixerpartir de um terminal e pressionar F6para selecionar outra placa de som. :)
slackmart
@ sgmart Oi, sgmart, fiz exatamente isso, mas não transfere som para esse dispositivo, apenas seleciona esse dispositivo para ajustar seus parâmetros, e não fluxos de saída para ele.
Boris Burkov
4
O utilitário alsamixer possui alguns controles: Master, PCI e assim por diante. Verifique se há um MMrótulo (MM = mudo), então use a Mtecla do teclado para ativar o som.
slackmart

Respostas:

4

Se o dispositivo USB estiver listado como uma placa de som no sistema, convém verificar man amixere usar o unmuteparâmetro.

amixer -c 1 set Master playback 100% unmute

Verifique também os outros canais (PCM etc.). Os exemplos do manual são:

   amixer -c 1 sset Line,0 80%,40% unmute cap
          will set the second soundcard's left line input volume to 80% and right line
          input to 40%, unmute it, and select it as a source for capture (recording).

   amixer -c 1 -- sset Master playback -20dB
          will set the master volume of the second card to -20dB.  If the  master  has
          multiple channels, all channels are set to the same value.

   amixer -c 1 set PCM 2dB+
          will  increase  the PCM volume of the second card with 2dB.  When both play‐
          back and capture volumes exist, this is applied to both volumes.

   amixer -c 2 cset iface=MIXER,name='Line Playback Volume",index=1 40%
          will set the third soundcard's second line playback volume(s) to 40%

   amixer -c 2 cset numid=34 40%
          will set the 34th soundcard element to 40%
Jari Laamanen
fonte
Obrigado, Jari, funciona. Li os manuais do ALSA e tenho uma pergunta: os dispositivos listados por amixer e alsamixer realmente não são dispositivos de hardware, mas os dispositivos ALSA, criados por plugins da alsa em /usr/share/alsa/alsa.conf e amigos? Entendo principalmente a sintaxe desses plug-ins, mas não consigo encontrar as definições das palavras-chave fundamentais, como "pcm" ou "ctl" ou "type". Não encontrei nenhuma lista de palavras-chave na documentação doxygen: alsa-project.org/alsa-doc/alsa-lib, alsa-project.org/alsa-doc/alsa-lib/conf.html. Você conhece alguma fonte de informação sobre eles?
Boris Burkov 27/08/13
8
Isso realmente não resolve a questão original. Você pode definir os parâmetros, mas isso não altera o cartão pelo qual o áudio é emitido.
se
2
Se isso realmente responder à pergunta original, é necessário um exemplo completo. Como isso faz algo que o alsamixer não pode fazer? Claramente, o alsamixer não pode mudar para a saída através de uma placa de som diferente. Ou, no meu caso, eu também queria produzir através da mesma placa de som, mas HDMI em vez de alto-falantes / fones de ouvido. Pulseaudio faz essas coisas, mas como? São necessários exemplos do início ao fim para tornar esta uma boa resposta.
Colin Keenan
1
Pitty, este foi selecionado como resposta - a pergunta é exatamente o que estou procurando: como alterar temporariamente o cartão usado para a saída. No entanto, como o @oneself já observou, essa resposta não explica realmente como fazer isso. Agora, é provável que fazer uma nova pergunta com quase o mesmo título seja fechado como duplicado.
domsson
1
@domsson basta ligar de volta a este e explicar que a resposta não resolveu o seu problema. Isso deve garantir que não seja fechado como um tolo.
terdon
0

IIUC você pode atualizar .asoundrcou /etc/asound.confdinamicamente. Portanto, deve ser possível ter dois arquivos headphones.confe front.confdefinir os dispositivos padrão para os hw:channel,devicenúmeros apropriados e depois ativá-los em um evento "ACPI jack / headphone HEADPHONE plug". Estou prestes a tentar isso, usando "ln" para vincular /etc/asound.confa um dos/etc/sounds/{headphones,front}.conf

AntisocialNetworker
fonte