Configurando o dispositivo ALSA padrão para o Pulseaudio

8

Recentemente, recebi uma placa de som externa / DAC (Fiio E17) e atualmente estou tentando configurá-la corretamente na minha instalação do Ubuntu 12.04. Ao conectá-lo via USB, ele é imediatamente reconhecido e aparece como um novo dispositivo nas configurações de áudio. A reprodução também funciona muito bem (exceto alguns problemas menores relacionados ao volume, que estão além do escopo desta pergunta).

No entanto, ao tentar testar a reprodução de 24 bits / 96 kHz, reproduzindo um arquivo de áudio mplayer, encontrei um pequeno problema:

Opening audio decoder: [pcm] Uncompressed PCM audio decoder
AUDIO: 96000 Hz, 2 ch, s24le, 4608.0 kbit/100.00% (ratio: 576000->576000)
Selected audio codec: [pcm] afm: pcm (Uncompressed PCM)
==========================================================================
AO: [pulse] 96000Hz 2ch s16le (2 bytes per sample)

Como pode ser visto na saída, mesmo que o arquivo reproduzido contenha áudio de 24 bits / 96 kHz, ele é reamostrado para 16 bits antes da reprodução. Tocar o mesmo arquivo com aplaymostra o motivo:

Playing WAVE 'sr003-02-2496.wav' : Signed 24 bit Little Endian in 3bytes, Rate 96000 Hz, Stereo
aplay: set_params:1081: Sample format non available
Available formats:
- U8
- S16_LE
- S16_BE
- S32_LE
- S32_BE
- FLOAT_LE
- FLOAT_BE
- MU_LAW
- A_LAW

No entanto, /proc/asound/card1/stream0confirma que o hardware suporta 24 bits:

FiiO FiiO USB DAC-E17 at usb-0000:00:1a.0-1.1, full speed : USB Audio

Playback:
  Status: Running
    Interface = 3
    Altset = 1
    Packet Size = 388
    Momentary freq = 44100 Hz (0x2c.199a)
  Interface 3
    Altset 1
    Format: S16_LE
    Channels: 2
    Endpoint: 3 OUT (ADAPTIVE)
    Rates: 32000, 44100, 48000, 96000
  Interface 3
    Altset 2
    Format: S24_3LE
    Channels: 2
    Endpoint: 3 OUT (ADAPTIVE)
    Rates: 32000, 44100, 48000, 96000

Nesse ponto, notei que, na guia hardware das configurações de som, posso selecionar dois perfis diferentes para a placa de som: Digital Stereo (IEC958) e Analog Stereo. Alternar entre esses dois não resulta em nenhuma alteração, até onde eu sei.

Porém, a especificação do dispositivo ALSA ajuda (ou seja, aplay -Dhw:1,0 sr003-02-2496.wavfunciona bem e reproduz o arquivo sem reamostragem). Mas como o Pulseaudio mostra apenas um dispositivo Fiio / coletor nas configurações de som, não sei como diria ao Pulseaudio para usar o dispositivo ALSA hw:1,0. Adicionando load-module module-alsa-source device=hw:1,0aos /etc/pulse/default.paresultados o cancelamento do Pulseaudio module.c: Failed to load module "module-alsa-source" (argument: "device=hw:1,0"): initialization failed.durante a inicialização.

Então, essa é a introdução, aqui estão minhas perguntas reais :

  • Como descobrir qual dispositivo ALSA o Pulseaudio realmente usa quando seleciono o Fiio E17 nas configurações de som?
  • Como digo ao Pulseaudio para usar o dispositivo ALSA hw: 1,0 ao selecionar o Fiio E17 nas minhas configurações de som?

Um pouco mais (espero que útil) de informações de depuração:

tmnt
fonte
Quais são as linhas de comando mplayere aplay?
CL.
@CL. Eu corro mplayer -ao alsa:device=hw=1.0 sr003-02-2496.wave aplay -Dhw:1,0 sr003-02-2496.wavpara usar o dispositivo correto, se é isso que você está perguntando.
tmnt
Eu estava perguntando sobre as chamadas que não funcionaram. E você quer usar o PulseAudio ou não?
CL.
@CL. Ah, desculpe, essas são apenas chamadas normais, sem bandeiras, ou seja, aplay sr003-02-2496.wave mplayer sr003-02-2496.wav. E sim, eu gostaria de usar o PulseAudio, se possível.
tmnt

Respostas:

8

Respondendo às duas perguntas:

Você pode selecionar o dispositivo padrão no PulseAudio com uma GUI como o controle de volume GNOME, pavucontrol ou na linha de comando usando pacmd set-default-sink.

Por padrão, o PulseAudio abre dispositivos para 44,1 kHz ou 48 kHz, o que resultar em menor esforço de reamostragem (portanto, o áudio de 96 kHz normalmente levaria o dispositivo a ser aberto a 48 kHz. Além disso, abrimos os dispositivos para S16LE por padrão.

Agora, você tem duas opções. Se você deseja reproduzir apenas alguns arquivos no formato nativo, paplay --passthrough <file>faça o trabalho por você. Você pode até especificar qual dispositivo usar.

A outra opção é fazer com que o PA use globalmente 96/24. Você pode mudar isso em /etc/pulse/default.conf( alternate-sample-rate = 96000, default-sample-format=s24-32le). Isso vai levar a uma maior utilização da CPU, no entanto. Essa é uma situação um pouco tola, tendo que aplicar a configuração global a todos os dispositivos. Planejamos adicionar a configuração por dispositivo em algum momento.

Observe que, depois disso, você deve usar o back-end PulseAudio do mplayer em vez de conversar com o mplayer com o ALSA e depois com o PulseAudio. Você pode fazer isso com mplayer -ao pulse ...e, se desejar configurá-lo permanentemente, adicione ao=pulsea ~/.mplayer/config.

Arun Raghavan
fonte
Muito obrigado pela sua ajuda! pacmd set-default-sinksó me permite definir uma das pias listadas por pacmd list-sinks, certo? Embora eu ache que a segunda parte da sua resposta torne essa pergunta discutível de qualquer maneira;) Então, se eu entendi direito, o Pulseaudio não suporta alternar dinamicamente entre 24 e 16 bits? Depois de mudar o meu default.conf, o mplayer ainda parece reamostrar tudo para 16 bits antes de entregá-lo ao pulso ( veja aqui ), é por causa do que CL. descreve em sua resposta?
tmnt
Ah, e paplaynão parece gostar dos meus arquivos de áudio :) A reprodução do arquivo de 24 bits leva a um segfault com a Code should not be reached at pulsecore/sndfile-util.c:391, function pa_sndfile_readf_function(). Aborting.reprodução de um arquivo de 32 bits e o Pulseaudio falha .
tmnt
4

Após a atualização para a 13.10, o Pulseaudio assumiu o padrão HDMI, provavelmente porque tenho um monitor extra conectado ao meu laptop (Lenovo T430S) através da minha porta de mini-display. O site archlinux forneceu uma resposta curta e agradável para redefinir ou definir o padrão:

  • faça o login e altere a saída padrão para analógico

  • Corre

    $ aplay -l

e achar que o analógico é o cartão 0

  • Corre

    lista $ pacmd

e encontre a linha:

active profile: <output:analog-stereo+input:analog-stereo>

"output: stereo-analógico + input: stereo-analógico" é o nome do meu perfil, então adicione

set-card-profile 0 output:analog-stereo+input:analog-stereo

em /etc/pulse/default.pa e salve

  • reiniciar pulseaudio
user235147
fonte
2

O formato de amostra usado na interface entre aplicativos e o PulseAudio nem sempre está diretamente relacionado ao formato de amostra usado pelo PulseAudio para acessar o dispositivo de hardware.

S24_3LEnão é um dos formatos de aplicativo suportados pelo PulseAudio (como mostrado na aplaysaída). Para permitir que aplicativos com esses formatos incomuns sejam executados com o PulseAudio, adicione um plug-in que faça a conversão automática de formato, se necessário, para o dispositivo PCM padrão no seu .asoundrc:

pcm.!default {
    type linear
    slave.pcm pulse
}
CL.
fonte
Obrigado pela ajuda, mas receio que isso não tenha mudado nada. Mesmo depois de adicionar isso ao meu .asoundrc, mplayerainda reduz a amostragem do áudio para 16 bits (ou seja, a saída parece a mesma que a postada na minha pergunta) e /proc/asound/card1/stream0ainda mostra o altset errado sendo usado. Se realmente havia um problema com os formatos suportados do PA, não deveria mplayerreduzir a amostragem do áudio, mesmo ao especificar o dispositivo ALSA, pois ele ainda usa o Pulseaudio?
tmnt
Funciona aplayagora? Parece ser um erro no mplayer.
CL.
Não, aplayainda falha com a mesma saída. Percebi agora que, ao definir default-sample-format = s24-32leno meu .pulse/daemon.conf, posso forçar o PA a usar o dispositivo de saída correto. No entanto, mplayerainda reanalisa o áudio e aplayainda falha ao tentar reproduzir o arquivo de áudio de 24 bits, então acho que isso também não ajuda.
tmnt
2

Apenas uma solução rápida que descobri usando o Lubuntu Trusty Tahr com meu Fiio E17 conectado via USB: Eu também estava pensando sobre a taxa de bits, é por isso que encontrei essas postagens aqui. Mas como eu ouço música em um Netbook bastante antigo, não quero configurá-la para 96/24 por padrão (a CPU não é a mais rápida). No entanto, o que funcionou para mim foi usar o VLC e especificar nas configurações de áudio especializadas para usar o módulo ALSA para saída e, em seguida, use o seguinte dispositivo de saída: "Fiio USB DAC-E17, dispositivo de hardware USB Audio Direct sem nenhuma conversão"

Dessa forma, consegui emitir 96/24 de som para o Fiio via USB quando quisesse (também aparece na pequena tela do Fiio) - e não precisei mudar algo mais fundamental no sistema operacional. Jogadores como audacioso ou navegadores ainda usam a saída pulseaudio padrão. Às vezes, o VLC diz que o dispositivo já está sendo usado - basta fechar qualquer outro software, como o audacioso, que esteja usando, por exemplo, a saída pulseaudio, e deve funcionar.

Atenciosamente, Andi

E eu
fonte
Veja também: askubuntu.com/questions/334626/…
landroni
1

Aqui está a resposta correta para esta pergunta:

Do ArchWiki

Determine o dispositivo ALSA hw que você deseja usar. Em seguida, adicione isso ao seu arquivo default.pa. (Altere 0,0 para se adequar ao seu dispositivo.)

load-module module-alsa-sink device=hw:0,0
Hydranix
fonte
1

Adicionar load-module module-alsa-source device=hw:1,0a /etc/pulse/default.paé a abordagem correta. No entanto, os seguintes módulos precisam ser descarregados para evitar conflitos de dispositivo (o initialization failederro que você obteve):

  • module-udev-detect
  • detecção de módulo

Dê uma olhada cuidadosa /etc/pulse/default.pae remova as linhas que contêm esses módulos. Além disso, nesse caso, os dispositivos não podem ser detectados automaticamente, portanto, você deseja carregar module-alsa-sinkpara especificar um coletor manualmente também.

Huan Zhang
fonte
Haveria um conflito para detectar a reprodução (coletor) se apenas os dispositivos de captura (origem) forem carregados manualmente?
Lucas