Acoustic passion

Acoustic passion

Configuration PA (Pulse Audio)

CONFIGURATION DE PULSE AUDIO POUR JACK

 

1- Installation du module jack

 

Pulse audio est l'API phare sous Ubuntu. Il est possible de transférer les flux audio de Pulse Audio vers le serveur Jack via un module : ce module peut être installé simplement à partir du gestionnaire de paquets et se trouve dans le package "pulseaudio-module-jack".

 

2- Configuration de Pulse Audio

 

Il faut à présent configurer Pulse Audio pour lancer ce module, et on en profitera pour modifier d'autres paramètres indispensables pour une écoute hi-fi. Dans un premier temps, faites une copie des 2 fichiers de configuration d'origine :

 

sudo cp /etc/pulse/daemon.conf /etc/pulse/daemon_backup.conf
sudo cp /etc/pulse/default.pa /etc/pulse/default_backup.pa

 

Ensuite on commencera par modifier le fichier default.pa pour charger le module jack installé précédemment afin de faire communiquer les flux audio de pulse audio vers jack (et réciproquement) :

 

sudo gedit /etc/pulse/default.pa

 

Dans ce fichier, il faudra ajouter 2 lignes dans la partie "Load audio drivers statically" :

 

### Load audio drivers statically
### (it's probably better to not load these drivers manually, but instead
### use module-udev-detect -- see below -- for doing this automatically)
#load-module module-alsa-sink
#load-module module-alsa-source device=hw:1,0
#load-module module-oss device="/dev/dsp" sink_name=output source_name=input
#load-module module-oss-mmap device="/dev/dsp" sink_name=output source_name=input
#load-module module-null-sink
#load-module module-pipe-sink

 

load-module module-jack-sink channels=2
load-module module-jack-source channels=2

Cela aura pour effet de charger module-jack-sink avec 2 canaux pour envoyer les flux de pulse audio vers jack, ainsi que module-jack-source avec 2 canaux également pour envoyer les flux de jack vers pulse audio.

 

Je conseille également de désactiver les modules de filtres heuristiques qui, il me semble, font varier le niveau sonore aléatoirement :

 

### Modules to allow autoloading of filters (such as echo cancellation)
### on demand. module-filter-heuristics tries to determine what filters
### make sense, and module-filter-apply does the heavy-lifting of
### loading modules and rerouting streams.

 

#load-module module-filter-heuristics
#load-module module-filter-apply

Enfin on ajoutera en fin de fichiers ces 2 lignes pour envoyer tout les flux audio par défaut vers nos modules jack-sink et jack-source :

 

### Make some devices default

 

set-default-sink jack_out
set-default-source jack_in

 

Passons maintenant à la configuration du fichier daemon.conf :

 

sudo gedit /etc/pulse/daemon.conf

La première ligne à modifier est celle qui concerne la qualité de resampling. On peut afficher les méthodes de resampling disponibles via la commande suivante :

 

pulseaudio --dump-resample-methods

Normalement vous devriez voir apparaître ceci :

 

trivial
speex-float-0
speex-float-1
speex-float-2
speex-float-3
speex-float-4
speex-float-5
speex-float-6
speex-float-7
speex-float-8
speex-float-9
speex-float-10
speex-fixed-0
speex-fixed-1
speex-fixed-2
speex-fixed-3
speex-fixed-4
speex-fixed-5
speex-fixed-6
speex-fixed-7
speex-fixed-8
speex-fixed-9
speex-fixed-10
ffmpeg
auto
copy
peaks

 

A priori les méthodes de resampling les plus performantes (pour des flottants) sont les méthodes speex-float-X où X peut prendre la valeur 0 à 10, par ordre de qualité croissante (10 = meilleure qualité).

 

En général, on recommande de choisir une valeur de 5, les qualités supérieures ne semblant pas justifier la consommation CPU excessive qu'elles engendrent (source : http://comments.gmane.org/gmane.comp.audio.pulseaudio.general/21051). Personnellement, j'ai testé par curiosité la méthode speex-float-10 et vérifié la consommation CPU sur mon système : pour 2 canaux avec un sampling rate cible de 48khz, la consommation par pulse audio est de 1% : je ne vois donc pas l'intérêt de me priver de cette qualité de resampling ! Je vous invite donc à faire vos essais en fonction de votre matériel et de faire votre propre choix !

 

Il faut à présent configurer le type de données du flux audio ! Je pense que le module jack_out, connecté au serveur jack, possède un "sample spec" imposé par le serveur jack auquel il est connecté. L'idée est donc de configurer pulse audio de sorte que le "sample spec" soit le même que celui du module jack (et donc que jack) afin d'éviter d'avoir des conversions de format inutile. On peut afficher les informations sur les flux audio sortants de Pulse Audio avec la ligne de commande suivante :

 

pacmd list-sinks

Comme la commande précédente affiche beaucoup de résultats, on peut se limiter normalement aux premières lignes avec la commande suivante qui n'affichera que les 20 premières lignes :

 

pacmd list-sinks | head -20

Chez moi il apparaît l'affichage suivant :

 

5 sink(s) available.
  * index: 0
    name: <jack_out>
    driver: <module-jack-sink.c>
    flags: DECIBEL_VOLUME LATENCY
    state: RUNNING
    suspend cause:
    priority: 0
    volume: front-left: 47155 /  72% / -8,58 dB,   front-right: 47155 /  72% / -8,58 dB
            balance 0,00
    base volume: 65536 / 100% / 0,00 dB
    volume steps: 65537
    muted: no
    current latency: 63,17 ms
    max request: 8 KiB
    max rewind: 0 KiB
    monitor source: 0
    sample spec: float32le 2ch 48000Hz
    channel map: front-left,front-right
                 Stereo

 

Il s'agit donc des informations relatives au module jack-sink, que nous avons lancé sous le nom de "jack_out" d'après notre configuration précédente, avec 2 canaux "front-left" et "front-right". Le sample spec est :

 

sample spec: float32le 2ch 48000Hz

Nous allons donc modifier notre fichier daemon.conf :

 

; rlimit-fsize = -1
; rlimit-data = -1
; rlimit-stack = -1
; rlimit-core = -1
; rlimit-as = -1
; rlimit-rss = -1
; rlimit-nproc = -1
; rlimit-nofile = 256
; rlimit-memlock = -1
; rlimit-locks = -1
; rlimit-sigpending = -1
; rlimit-msgqueue = -1
; rlimit-nice = 31
; rlimit-rtprio = 9
; rlimit-rttime = 200000

 

default-sample-format = float32le
default-sample-rate = 48000

; default-sample-format = s16le
; default-sample-rate = 44100
; alternate-sample-rate = 48000

 

default-sample-channels = 2
default-channel-map = front-left,front-right

Les 2 dernières lignes indiqueront au serveur pulse audio de fonctionner par défaut avec 2 canaux audio, de sorte que les logiciels fonctionnent par défaut en stéréo (si vous souhaitez une configuration surround, il faudrait modifier la configuration du fichier default.pa pour lancer le module jack-sink avec le nombre de canaux appropriés, mais vous pouvez laisser pulse audio fonctionner par défaut en stéréo et configurer les logiciels tels que vlc pour fonctionner en 5.1 par exemple).

 

 

 3- Redémarrage de Pulse Audio

 

Pour redémarrer pulse audio, on tapera les lignes de commandes suivantes :

 

pulseaudio --kill
pulseaudio --start

Il vous faudra probablement relancer les applications audio pour qu'elles fonctionnent de nouveau.

 

Voilà ! Vous devriez à présent pouvoir rediriger le flux audio de toutes les applications fonctionnant sous Pulse Audio vers le serveur Jack, sans conversion inutile de format ou de fréquence d'échantillonnage.

De plus, dans le cas où la conversion de fréquence d'échantillonnage est obligatoire, elle sera faite avec une bonne qualité grâce à la configuration de la méthode de resampling !



02/11/2015
0 Poster un commentaire

Inscrivez-vous au blog

Soyez prévenu par email des prochaines mises à jour

Rejoignez les 20 autres membres