Como configurar o PulseAudio para entrada / saída via ALSA?

0

Como configuro o PulseAudio para usar apenas um único dispositivo ALSA para entrada e saída?

A configuração padrão do PulseAudio faz com que o PulseAudio abra todos os dispositivos ALSA quando for iniciado. Isso torna impossível usar o PulseAudio junto com outros clientes do ALSA. Muitas pessoas preferem o PulseAudio à ALSA, mas outros usuários acham isso frustrante. Para melhor ou pior, o PulseAudio tornou-se um padrão e vários aplicativos Linux populares, como Skype e Firefox, suportam apenas a saída de áudio via PulseAudio.

Alguns usuários preferem trabalhar com clientes de áudio que saem diretamente para o ALSA, outros enviam para outro framework de áudio como o JACK, mas querem que o JACK acesse o ALSA diretamente. Para esses usuários, é fácil liberar todos os dispositivos ALSA, desinstalando o PulseAudio. No entanto, a remoção do PulseAudio impossibilita o uso de áudio no Skype e no Firefox.

Uma solução melhor seria criar uma configuração que faça com que o PulseAudio "funcione bem" com outros clientes do ALSA, exibindo apenas um único dispositivo, que seria especificado em sua configuração, ou até mesmo apenas o ALSA default dispositivo. Como podemos fazer isso?

    
por Metamorphic 17.12.2016 / 00:00

2 respostas

2

Esta resposta baseia-se na resposta do @ dirkt, por isso agradeço a ele.

  1. Você pode editar ~/.config/pulse/default.pa . Está listado em FILES na página de manual "pulseaudio (1)". Se estiver presente, o% globaldefault.pa não será usado. Para mim, posso obter uma configuração de trabalho com a seguinte configuração mínima:

    load-module module-alsa-sink device=default
    load-module module-alsa-source device=default
    
    load-module module-native-protocol-unix
    

    No entanto, talvez você queira examinar a versão global, que é /etc/pulse/default.pa em meu sistema, para ver o que mais poderia acontecer nesse arquivo. Há todos os tipos de sinos e assobios configurados aqui: módulos para restaurar configurações de volume, descobrir dispositivos bluetooth, fazer interface com o JACK, sair automaticamente do daemon quando o usuário fizer logout e assim por diante. Se você decidir copiar o arquivo global para seu diretório inicial e editá-lo, ou mesmo editar diretamente o arquivo global, será necessário fazer o seguinte:

    • Comente load-module module-udev-detect , que procura dispositivos de hardware ALSA e substitui o argumento de dispositivo que você passou para os módulos da ALSA acima.
    • Adicione as linhas module-alsa-sink e module-alsa-source . A linha module-native-protocol-unix já deve estar presente.
    • Talvez seja necessário comentar a linha load-module module-suspend-on-idle ; isso causou problemas para mim em testes com determinados dispositivos de saída . O sintoma é que mplayer -ao pulse ... relata "dispositivo de áudio ficou preso!" e mpv -ao pulse ... relatórios "[ao / pulse] O fluxo está suspenso. Aguardando." Comentando que o módulo resolveu o problema.
  2. Se você escolher dispositivos diferentes de device=default acima, por exemplo, dois separar dispositivos ALSA para gravação e reprodução, isso não funcionará na minha experiência - parecord tenta gravar a partir do dispositivo sink ao invés do dispositivo de origem. Se você configurou dispositivos separados para entrada e saída via ALSA, e você quer que eles sejam nomeados pelo mesmo dispositivo PCM , você precisa colocar algo assim em ~/.asoundrc :

    pcm.!default {     # "!" means "override" the previous definition
        type asym
        playback.pcm "hw4mix"
        capture.pcm "hw:5"
    }
    

    Aqui hw4mix nomeia um dispositivo dmix definido anteriormente no arquivo; while hw:5 especifica o dispositivo de hardware para o meu microfone USB. Isso deixa o PulseAudio feliz. Se você quiser usar um dispositivo especial para os clientes PulseAudio, você pode nomear "special_pulseaudio_device" em vez de "default" (e, é claro, atualizar default.pa para se referir a ele).

  3. Teste. Use pulseaudio -k ou killall pulseaudio para eliminar o daemon atual do PulseAudio. Em seguida, inicie-o novamente com pulseaudio -vv . Naturalmente, você precisará fazer isso toda vez que editar ~/.asoundrc . Depois de ter uma configuração de trabalho, você pode tentar algo como pactl exit; pulseaudio --start . A opção --start faz com que seja executado em segundo plano, onde você não poderá ver mensagens de erro.

    Use parecord -v t.wav e paplay -v t.wav para gravar e reproduzir um arquivo WAV. Você deve conseguir que esses comandos sejam executados ao mesmo tempo.

    • Como uso um dispositivo dmix para reprodução, posso usar paplay e aplay juntos e a mixagem ocorre automaticamente. No entanto, o microfone não pode ser compartilhado na minha configuração; Não consigo gravar usando arecord quando o PulseAudio está em execução ("Dispositivo ou recurso ocupado"). Para isso, eu precisaria criar um dispositivo dsnoop e colocar seu nome no lugar de hw:5 acima.

    • Se você está tentando fazer o Skype funcionar, use o "Serviço de teste de eco / som" do Skype para testar sua configuração. Lembre-se de que o Skype já pode estar sendo executado em segundo plano - tente killall skype antes de iniciá-lo, para forçá-lo a fazer uma nova conexão PulseAudio. Na minha experiência, o Skype não informa qualquer tipo de condição de erro quando não consegue se conectar ao daemon PulseAudio.

Ter uma boa configuração do ALSA é desejável, mesmo se apenas porque determinados aplicativos (Ecasound? código herdado?) não funcionam com o PulseAudio. Espero que essas instruções sejam úteis para qualquer pessoa que, tendo configurado a ALSA como quiser, agora queira usar programas como o Skype, que dependem do PulseAudio.

    
por 19.12.2016 / 22:19
2

Você não configura o PulseAudio para usar o dispositivo padrão da ALSA. Em vez disso, você configura o ALSA para usar pulse como o dispositivo padrão:

pcm.!default pulse
ctl.!default pulse

Dessa forma, os aplicativos da ALSA que não conhecem o PulseAudio usarão o PulseAudio por meio dessa camada indireta.

O motivo pelo qual você precisa fazer isso é que o PulseAudio sempre usa o ALSA como back-end e, na inicialização, abre todos dispositivos ALSA e, como a maioria dos dispositivos ALSA não pode ser aberto várias vezes, isso fará com que todos os aplicativos ALSA tentem usar um dispositivo ALSA diretamente quando o PulseAudio estiver em execução para falhar.

Se você tiver um aplicativo legado que, por algum motivo, não funciona, use pasuspender para suspender temporariamente o PulseAudio para executar esse aplicativo específico.

Na verdade, eu estava em uma situação parecida com a que você está agora, usei o ALSA por um longo tempo e fiquei feliz e fui forçado a mudar para o PulseAudio. O PulseAudio tem, em princípio, uma estrutura melhor e mais geral do que o ALSA (fluxos e fontes / sumidouros) e, embora às vezes tenha verrugas, é possível viver com ele.

Você pode depurar problemas iniciando pulseaudio manualmente e adicionando -v flags, como pulseaudio -vv start etc. As mensagens de log vão para o syslog. Se você quiser trocar de dispositivo, pavucontrol é uma GUI fácil de usar, e se você quer um controle mais direto, você pode usar pacmd ou pactl (eu nunca descobri porque existem dois programas) como um CLI de linha de comando. Use o argumento help para mais detalhes. Se você preferir arquivos, tudo facilmente scriptável.

Eu também recomendo dar uma olhada nos módulos disponíveis .

    
por 17.12.2016 / 16:49