Configuración del dispositivo ALSA predeterminado para Pulseaudio

8

Recientemente recibí una tarjeta de sonido externa / DAC (Fiio E17) y actualmente estoy tratando de configurarla correctamente en mi instalación de Ubuntu 12.04. Al enchufarlo a través de USB, se reconoce de inmediato y aparece como un nuevo dispositivo en la configuración de audio. La reproducción también funciona bien (excepto algunos problemas menores relacionados con el volumen, que están fuera del alcance de esta pregunta).

Sin embargo, al intentar probar la reproducción de 24 bits / 96 kHz reproduciendo un archivo de audio con este tipo mplayer, encontré un pequeño 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 se puede ver en la salida, aunque el archivo reproducido contiene audio de 24 bits / 96 kHz, se vuelve a muestrear a 16 bits antes de la reproducción. Reproducir el mismo archivo con aplaymuestra el 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

Sin embargo, /proc/asound/card1/stream0 confirma que el hardware admite 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

En este punto, noté que en la pestaña de hardware de la configuración de sonido, puedo seleccionar dos perfiles diferentes para la tarjeta de sonido: estéreo digital (IEC958) y estéreo analógico. Sin embargo, cambiar entre estos dos no produce ningún cambio, por lo que puedo decir.

Sin embargo, especificar el dispositivo ALSA ayuda (es decir, aplay -Dhw:1,0 sr003-02-2496.wavfunciona bien y reproduce el archivo sin volver a muestrearlo). Pero dado que Pulseaudio solo muestra un dispositivo / receptor Fiio en la configuración de sonido, no estoy seguro de cómo le diría a Pulseaudio que use el dispositivo ALSA hw:1,0. Agregando load-module module-alsa-source device=hw:1,0a/etc/pulse/default.pa resultados en Pulseaudio abortando module.c: Failed to load module "module-alsa-source" (argument: "device=hw:1,0"): initialization failed.durante el inicio.

Entonces, esa es la introducción, aquí están mis preguntas reales :

  • ¿Cómo puedo determinar qué dispositivo ALSA utiliza realmente Pulseaudio cuando selecciono el Fiio E17 en la configuración de sonido?
  • ¿Cómo le digo a Pulseaudio que use el dispositivo ALSA hw: 1,0 cuando selecciono el Fiio E17 en mi configuración de sonido?

Información de depuración más (con suerte útil):

tmnt
fuente
¿Qué son las líneas de comando mplayery aplay?
CL.
@CL. Corro mplayer -ao alsa:device=hw=1.0 sr003-02-2496.wavy aplay -Dhw:1,0 sr003-02-2496.wavuso el dispositivo correcto, si eso es lo que estás preguntando.
tmnt
Estaba preguntando sobre las llamadas que no funcionaron. ¿Y quieres usar PulseAudio o no?
CL.
@CL. Ah, lo siento, esas son llamadas normales sin ninguna bandera, es decir aplay sr003-02-2496.wavy mplayer sr003-02-2496.wav. Y sí, me gustaría usar PulseAudio si es posible.
tmnt

Respuestas:

8

Respondiendo las dos preguntas:

Puede seleccionar el dispositivo predeterminado en PulseAudio con una GUI como el control de volumen GNOME, pavucontrol o desde la línea de comando usando pacmd set-default-sink.

Por defecto, PulseAudio abre dispositivos para 44.1 kHz o 48 kHz, lo que conduce a un menor esfuerzo de remuestreo (por lo que el audio de 96 kHz generalmente llevaría a que el dispositivo se abra a 48 kHz. Además, abrimos los dispositivos para S16LE de forma predeterminada.

Ahora, tú tienes dos opciones. Si solo desea reproducir algunos archivos en su formato nativo, paplay --passthrough <file>debe hacer el trabajo por usted. Incluso puede especificar qué dispositivo usar.

La otra opción es hacer que PA use globalmente 96/24. Puede cambiar eso en /etc/pulse/default.conf( alternate-sample-rate = 96000, default-sample-format=s24-32le). Esto va a llevar a una mayor utilización de la CPU, sin embargo. Esta es una situación un poco tonta, tener que aplicar la configuración global para todos los dispositivos. Estamos planeando agregar la configuración por dispositivo en algún momento.

Tenga en cuenta que después de esto, debe usar el backend PulseAudio de mplayer en lugar de hacer que mplayer hable con ALSA y luego ALSA con PulseAudio. Puede hacerlo con mplayer -ao pulse ...y si desea configurarlo permanentemente, agregue ao=pulsea ~/.mplayer/config.

Arun Raghavan
fuente
¡Muchas gracias por tu ayuda! pacmd set-default-sinksolo me permite configurar uno de los sumideros enumerados pacmd list-sinks, ¿verdad? Aunque supongo que la segunda parte de tu respuesta hace que esa pregunta sea discutible de todos modos;) Entonces, si te entiendo correctamente, Pulseaudio no admite el cambio dinámico entre 24 y 16 bits. Después de cambiar mi default.conf, mplayer todavía parece volver a muestrear todo a 16 bits antes de pasarlo a pulso ( ver aquí ), es por eso CL. describe en su respuesta?
tmnt
Ah, y paplayparece que no me gustan mis archivos de audio :) Reproducir el archivo de 24 bits conduce a una falla por defecto Code should not be reached at pulsecore/sndfile-util.c:391, function pa_sndfile_readf_function(). Aborting., y reproducir un archivo de 32 bits incluso bloquea Pulseaudio .
tmnt
4

Después de la actualización a 13.10, Pulseaudio se configuró de manera predeterminada en HDMI, probablemente porque tengo un monitor adicional conectado a mi computadora portátil (Lenovo T430S) a través de mi puerto de mini pantalla. El sitio web de archlinux proporcionó una respuesta dulce y breve para restablecer o establecer el valor predeterminado:

  • iniciar sesión y cambiar la salida predeterminada a analógica

  • correr

    $ aplay -l

y encontrar que análogo es la tarjeta 0

  • correr

    $ pacmd list

y encuentra la línea:

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

"output: analog-stereo + input: analog-stereo" es mi nombre de perfil, así que agregue

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

en /etc/pulse/default.pa y guarde

  • reiniciar pulseaudio
usuario235147
fuente
2

El formato de muestra utilizado en la interfaz entre aplicaciones y PulseAudio no siempre está directamente relacionado con el formato de muestra que PulseAudio utiliza para acceder al dispositivo de hardware.

S24_3LEno es uno de los formatos de aplicación compatibles de PulseAudio (como se muestra en la aplaysalida). Para permitir que aplicaciones con formatos tan inusuales se ejecuten con PulseAudio, agregue un complemento que realice la conversión automática de formato si es necesario para el dispositivo PCM predeterminado en su .asoundrc:

pcm.!default {
    type linear
    slave.pcm pulse
}
CL.
fuente
Gracias por su ayuda, pero me temo que esto no cambió nada. Incluso después de agregar esto a mi .asoundrc, mplayersigue bajando la muestra de audio a 16 bits (es decir, la salida se ve igual que la publicada en mi pregunta) y /proc/asound/card1/stream0todavía muestra el altset incorrecto que se está utilizando. Si en realidad fue un problema con los formatos admitidos por PA, ¿no debería mplayerreducir el muestreo del audio incluso al especificar el dispositivo ALSA, ya que todavía utiliza Pulseaudio?
tmnt
¿ aplayFunciona ahora? Esto parece ser un error en mplayer.
CL.
No, aplaytodavía falla con la misma salida. Me he dado cuenta ahora que mediante el establecimiento default-sample-format = s24-32leen mi .pulse/daemon.confme puede obligar PA para utilizar el dispositivo de salida correcto. Sin embargo, mplayeraún vuelve a muestrear el audio, y aplayaún falla al intentar reproducir el archivo de audio de 24 bits, por lo que supongo que esto tampoco ayuda.
tmnt
2

Solo una solución rápida que descubrí usando Lubuntu Trusty Tahr con mi Fiio E17 conectado a través de USB: también me preguntaba sobre la tasa de bits, es por eso que encontré estas publicaciones aquí. Pero como escucho música en un Netbook bastante antiguo, no quería configurarlo en 96/24 de forma predeterminada (la CPU no es la más rápida). Sin embargo, lo que funcionó para mí fue usar VLC y especificar en la configuración de audio experta usar el módulo ALSA para la salida y luego usar el siguiente dispositivo de salida: "Fiio USB DAC-E17, dispositivo de hardware USB Audio Direct sin ninguna conversión"

De esta manera, pude emitir sonido 96/24 al Fiio a través de USB cuando quería (también se muestra en la pequeña pantalla del Fiio), y no tuve que cambiar algo más fundamental en el sistema operativo. Los jugadores como audaces o los navegadores todavía usan la salida de audio de pulso predeterminada. A veces, VLC dice que el dispositivo ya se está utilizando, luego cierre cualquier otro software como audaz, que está utilizando, por ejemplo, la salida de audio de pulso, y debería funcionar.

saludos, Andi

Y yo
fuente
Ver también: askubuntu.com/questions/334626/…
landroni
1

Aquí está la respuesta correcta a esta pregunta:

De ArchWiki

Determine el dispositivo ALSA hw que desea usar. Luego agregue esto a su archivo default.pa. (Cambie 0,0 para adaptarlo a su dispositivo).

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

Agregar load-module module-alsa-source device=hw:1,0a /etc/pulse/default.paes el enfoque correcto. Sin embargo, los siguientes módulos deben descargarse para evitar conflictos de dispositivos (el initialization failederror que obtuvo):

  • módulo-udev-detect
  • módulo de detección

Observe cuidadosamente /etc/pulse/default.pay elimine las líneas que contienen esos módulos. Además, en este caso, los dispositivos no se pueden detectar automáticamente, por lo que también desea cargarlos module-alsa-sinkpara especificar un sumidero manualmente.

Huan Zhang
fuente
¿Habría un conflicto para detectar la reproducción (sumidero) si solo los dispositivos de captura (fuente) se cargan manualmente?
Lucas