Configuration du périphérique ALSA par défaut pour Pulseaudio

8

J'ai récemment obtenu une carte son / DAC externe (Fiio E17) et j'essaie actuellement de la configurer correctement sur mon installation Ubuntu 12.04. Lorsque vous le branchez via USB, il est immédiatement reconnu et apparaît comme un nouvel appareil dans les paramètres audio. La lecture fonctionne également très bien (à l'exception de quelques problèmes mineurs liés au volume, qui dépassent le cadre de cette question).

Cependant, lorsque mplayerj'ai essayé de tester la lecture 24 bits / 96 kHz en lisant un tel fichier audio avec , j'ai rencontré un petit problème:

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)

Comme le montre la sortie, même si le fichier lu contient de l'audio 24 bits / 96 kHz, il est rééchantillonné à 16 bits avant la lecture. La lecture du même fichier avec aplaymontre la raison:

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

Cependant, /proc/asound/card1/stream0confirme que le matériel prend en charge 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

À ce stade, j'ai remarqué que dans l'onglet matériel des paramètres audio, je peux sélectionner deux profils différents pour la carte son: stéréo numérique (IEC958) et stéréo analogique. Pour autant que je sache, le basculement entre ces deux n'entraîne aucun changement.

La spécification du périphérique ALSA aide cependant (c'est-à-dire qu'il aplay -Dhw:1,0 sr003-02-2496.wavfonctionne très bien et lit le fichier sans rééchantillonnage). Mais comme Pulseaudio n'affiche qu'un seul appareil / récepteur Fiio dans les paramètres sonores, je ne sais pas comment je dirais à Pulseaudio d'utiliser l'appareil ALSA hw:1,0. Ajout load-module module-alsa-source device=hw:1,0aux /etc/pulse/default.parésultats dans Pulseaudio avortant avec module.c: Failed to load module "module-alsa-source" (argument: "device=hw:1,0"): initialization failed.au démarrage.

Voilà donc l'introduction, voici mes vraies questions :

  • Comment savoir quel appareil ALSA Pulseaudio utilise réellement lorsque je sélectionne le Fiio E17 dans les paramètres sonores?
  • Comment dire à Pulseaudio d'utiliser le périphérique ALSA hw: 1,0 lors de la sélection du Fiio E17 dans mes paramètres sonores?

Quelques informations de débogage supplémentaires (je l'espère utiles):

tmnt
la source
Quelles sont les lignes de commande mplayeret aplay?
CL.
@CL. Je cours mplayer -ao alsa:device=hw=1.0 sr003-02-2496.wavet aplay -Dhw:1,0 sr003-02-2496.wavutilise le bon appareil, si c'est ce que vous demandez.
tmnt
Je posais des questions sur les appels qui n'ont pas fonctionné. Et voulez-vous utiliser PulseAudio ou non?
CL.
@CL. Ah, désolé, ce ne sont que des appels normaux sans aucun indicateur, c'est-à-dire aplay sr003-02-2496.wavet mplayer sr003-02-2496.wav. Et oui, je voudrais utiliser PulseAudio si possible.
tmnt

Réponses:

8

Répondre aux deux questions:

Vous pouvez sélectionner le périphérique par défaut dans PulseAudio avec une interface graphique comme le contrôle du volume GNOME, pavucontrol ou à partir de la ligne de commande à l'aide de pacmd set-default-sink.

Par défaut, PulseAudio ouvre les appareils à 44,1 kHz ou 48 kHz, ce qui conduit à un effort de rééchantillonnage plus faible (donc l'audio à 96 kHz entraînerait généralement l'ouverture de l'appareil à 48 kHz. De plus, nous ouvrons les appareils pour S16LE par défaut.

Maintenant, vous avez deux options. Si vous voulez simplement lire quelques fichiers dans leur format natif, paplay --passthrough <file>devrait faire le travail pour vous. Vous pouvez même spécifier quel appareil utiliser.

L'autre option est de faire en sorte que PA utilise globalement 96/24. Vous pouvez changer cela en /etc/pulse/default.conf( alternate-sample-rate = 96000, default-sample-format=s24-32le). Cela va conduire à une plus grande utilisation du processeur, bien que. C'est une situation un peu idiote, devoir appliquer une configuration globale pour tous les appareils. Nous prévoyons d'ajouter une configuration par périphérique à un moment donné.

Notez qu'après cela, vous devez simplement utiliser le backend PulseAudio de mplayer plutôt que de laisser mplayer parler à ALSA puis ALSA à PulseAudio. Vous pouvez le faire avec mplayer -ao pulse ...et si vous souhaitez le configurer de façon permanente, ajoutez ao=pulseà ~/.mplayer/config.

Arun Raghavan
la source
Je vous remercie beaucoup pour votre aide! pacmd set-default-sinkme permet seulement de définir l'un des éviers répertoriés par pacmd list-sinksbien, non? Bien que je suppose que la deuxième partie de votre réponse rend cette question théorique de toute façon;) Donc, si je vous comprends bien, Pulseaudio ne prend pas en charge la commutation dynamique entre 24 et 16 bits? Après avoir changé mon default.conf, mplayer semble toujours tout rééchantillonner en 16 bits avant de le passer à pulse ( voir ici ), c'est à cause de ce que CL. décrit dans sa réponse?
tmnt
Oh, et paplayne semble pas aimer mes fichiers audio :) La lecture du fichier 24 bits conduit à un défaut de configurationCode should not be reached at pulsecore/sndfile-util.c:391, function pa_sndfile_readf_function(). Aborting. et la lecture d'un fichier 32 bits bloque même Pulseaudio .
TMNT
4

Après la mise à jour vers 13.10, Pulseaudio est passé par défaut à HDMI, probablement parce que j'ai un moniteur supplémentaire connecté à mon ordinateur portable (Lenovo T430S) via mon port mini-écran. Le site Web archlinux a fourni une réponse douce et courte pour réinitialiser ou définir la valeur par défaut:

  • connectez-vous et changez la sortie par défaut en analogique

  • Courir

    $ aplay -l

et trouver que l'analogique est la carte 0

  • Courir

    $ pacmd list

et trouvez la ligne:

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

"sortie: analogique-stéréo + entrée: analogique-stéréo" est mon nom de profil, alors ajoutez

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

dans /etc/pulse/default.pa et enregistrez

  • redémarrer pulseaudio
user235147
la source
2

Le format d'exemple utilisé dans l'interface entre les applications et PulseAudio n'est pas toujours directement lié au format d'exemple que PulseAudio utilise pour accéder au périphérique matériel.

S24_3LEn'est pas l'un des formats d'application pris en charge par PulseAudio (comme indiqué dans la aplaysortie). Pour permettre aux applications avec ces formats inhabituels de s'exécuter avec PulseAudio, ajoutez un plugin qui effectue la conversion de format automatique si vous avez besoin du périphérique PCM par défaut dans votre .asoundrc:

pcm.!default {
    type linear
    slave.pcm pulse
}
CL.
la source
Merci pour votre aide, mais je crains que cela ne change rien. Même après l'avoir ajouté à mon .asoundrc, sous- mplayeréchantillonne toujours l'audio à 16 bits (c'est-à-dire que la sortie ressemble à celle publiée dans ma question) et /proc/asound/card1/stream0montre toujours le mauvais altset utilisé. S'il s'agissait en fait d'un problème avec les formats pris en charge par PA, ne devrait-il pas sous- mplayeréchantillonner l'audio même lors de la spécification du périphérique ALSA, car il utilise toujours Pulseaudio?
tmnt
Ça aplaymarche maintenant? Cela semble être un bogue dans mplayer.
CL.
Non, aplayéchoue toujours avec la même sortie. J'ai remarqué maintenant qu'en configurant default-sample-format = s24-32lemon, .pulse/daemon.confje peux forcer PA à utiliser le bon périphérique de sortie. Cependant, mplayerrééchantillonne toujours l'audio et aplayéchoue toujours lorsque vous essayez de lire le fichier audio 24 bits, donc je suppose que cela n'aide pas non plus.
tmnt
2

Juste une solution rapide, j'ai découvert en utilisant Lubuntu Trusty Tahr avec mon Fiio E17 connecté via USB: je me posais également des questions sur le débit binaire, c'est pourquoi j'ai trouvé ces articles ici. Mais comme j'écoute de la musique sur un Netbook plutôt ancien, je ne voulais pas le régler sur 96/24 par défaut (le processeur n'est pas le plus rapide). Cependant, ce qui a fonctionné pour moi, c'est d'utiliser VLC et de le spécifier dans les paramètres audio experts. pour utiliser le module ALSA pour la sortie, puis utilisez le périphérique de sortie suivant: "Fiio USB DAC-E17, périphérique matériel USB Audio Direct sans aucune conversion"

De cette façon, j'ai pu émettre du son 96/24 sur le Fiio via USB quand je le voulais (s'affiche également sur le petit écran du Fiio) - et je n'ai pas eu à changer quelque chose de plus fondamental dans le système d'exploitation. Les joueurs comme audacieux ou les navigateurs utilisent toujours la sortie pulseaudio par défaut. Parfois, VLC dit que l'appareil est déjà utilisé - fermez simplement tout autre logiciel comme audacieux, qui utilise par exemple la sortie pulseaudio, et cela devrait fonctionner.

Cordialement, Andi

Et moi
la source
Voir aussi: askubuntu.com/questions/334626/…
landroni
1

Voici la bonne réponse à cette question:

Depuis ArchWiki

Déterminez le périphérique ALSA hw que vous souhaitez utiliser. Ajoutez ensuite ceci à votre fichier default.pa. (Modifiez 0,0 pour l'adapter à votre appareil.)

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

Ajouter load-module module-alsa-source device=hw:1,0à /etc/pulse/default.paest la bonne approche. Cependant, les modules suivants doivent être déchargés pour éviter les conflits de périphériques (l' initialization failederreur que vous avez):

  • module-udev-detect
  • module-detect

Examinez attentivement vos /etc/pulse/default.palignes et supprimez ces modules. De plus, dans ce cas, les périphériques ne peuvent pas être détectés automatiquement, vous devez donc charger module-alsa-sinkpour spécifier un récepteur manuellement également.

Huan Zhang
la source
Y aurait-il un conflit pour détecter la lecture (récepteur) si seuls les périphériques de capture (source) étaient chargés manuellement?
Lucas