Problèmes Squeezelite
Mon ordinateur de bureau est sous SOLYDX (Debian stable) qui est une distribution avec environnement de bureau XFCE. J’ai toujours des problèmes de craquements après quelques heures mais seulement avec squeezelite, les autres applications ne reproduisent pas ce problème.
Il semble y avoir un problème de conversion lorsque l’on passe d’un fichier 24-192, 24-96, 24-88, 16-44 et MP3 à travers une sortie pulse. La combinaison de Pulse et Squeezelite génère des craquements au lieu de la musique. Lorsque je redémarre Squeezelite tout est à nouveau fonctionnel. Le problème survient régulièrement lorsque je démarre Firefox ou Thunderbird. Le seul lien que je vois pour le moment c’est les notifications.
Voici une tentative de solution que j’ai mis en place sur mon Asus N73:
Créer un script de démarrage de squeezelite:
sudo nano ~/squeezelite_start.sh
/home/lafontaj/Logiciels/squeezelite/squeezelite-x86-64 -r 44100 -a ::16 -o default
Je viens de changer cette commande pour la suivante puisque j’ai lu que parfois l’utilisation de l’option default amène des problèmes de ce genre
/home/lafontaj/Logiciels/squeezelite/squeezelite-x86-64 -r 44100 -a ::16 -o pulse
Pour un démarrage automatique sous Solydx, ajouter une entrée dans les paramètres « Session et démarrage » >> « Démarrage automatique » qui exécute le script de démarrage de squeezelite.
Finalement pour régler le problème, j’ai effectué les opérations suivantes:
sudo apt-get purge pulseaudio
sudo apt-get install pulseaudio
En réinstallant pulseaudio à neuf, cela a fait un bon ménage dans les fichiers de configuration mais sans régler le problème. J’ai ensuite téléchargé une nouvelle version de squeezelite du site de Ralph https://www.mediafire.com/folder/4q8dvq20iyz9e/Builds#j1336qrs7zffj
squeezelite-1.8.4-720-debian8-x86_64.tar.gz et j’ai modifié la ligne de commande pour lancer l’application
/home/lafontaj/Logiciels/squeezelite/squeezelite -z -r 44100 -a ::16 -o pulse
Mais sans régler le problème.
Ce que je note c’est qu’en déactivant la notification de l’applet pulseaudio les problèmes cessent.
Maintenant tout fonctionne bien depuis plusieurs jours… enfin
J’ai aussi essayé squeezelite-pa des dépôts, mais celui-ci ne retourne pas l’ensemble des carte de son disponible sur le système.
Ce qui suit est en référence mais aucune des propositions n’a réglé le problème.
Trouver les paramètres des cartes audio (1/4)
Afin de trouver les paramètres de mise en cache de votre carte audio:
pactl list sinks
Pour chaque carte audio trouvée, par PulseAudio, vous obtiendrez une sortie similaire à celle-ci:
Sink #0 State: RUNNING Name: alsa_output.pci-0000_00_1b.0.hdmi-stereo Description: Audio interne Digital Stereo (HDMI) Driver: module-alsa-card.c Sample Specification: s16le 2ch 44100Hz Channel Map: front-left,front-right Owner Module: 6 Mute: no Volume: front-left: 26212 / 40% / -23,88 dB, front-right: 26212 / 40% / -23,88 dB balance 0,00 Base Volume: 65536 / 100% / 0,00 dB Monitor Source: alsa_output.pci-0000_00_1b.0.hdmi-stereo.monitor Latency: 9689 usec, configured 10000 usec Flags: HARDWARE DECIBEL_VOLUME LATENCY SET_FORMATS Properties: alsa.resolution_bits = "16" device.api = "alsa" device.class = "sound" alsa.class = "generic" alsa.subclass = "generic-mix" alsa.name = "HDMI 0" alsa.id = "HDMI 0" alsa.subdevice = "0" alsa.subdevice_name = "subdevice #0" alsa.device = "3" alsa.card = "0" alsa.card_name = "HDA Intel PCH" alsa.long_card_name = "HDA Intel PCH at 0xdf000000 irq 45" alsa.driver_name = "snd_hda_intel" device.bus_path = "pci-0000:00:1b.0" sysfs.path = "/devices/pci0000:00/0000:00:1b.0/sound/card0" device.bus = "pci" device.vendor.id = "8086" device.vendor.name = "Intel Corporation" device.product.id = "1c20" device.product.name = "6 Series/C200 Series Chipset Family High Definition Audio Controller" device.form_factor = "internal" device.string = "hdmi:0" device.buffering.buffer_size = "65536" device.buffering.fragment_size = "32768" device.access_mode = "mmap+timer" device.profile.name = "hdmi-stereo" device.profile.description = "Digital Stereo (HDMI)" device.description = "Audio interne Digital Stereo (HDMI)" alsa.mixer_name = "Intel CougarPoint HDMI" alsa.components = "HDA:10ec0269,10431a33,00100100 HDA:80862805,80860101,00100000" module-udev-detect.discovered = "1" device.icon_name = "audio-card-pci" Ports : hdmi-output-0: HDMI / DisplayPort (priority: 5900, available) Port actif : hdmi-output-0 Formats: pcm Sink #1 State: SUSPENDED Name: alsa_output.usb-0d8c_000c-00-U0xd8c0x0c.analog-stereo Description: Audio Adapter Stéréo analogique Driver: module-alsa-card.c Sample Specification: s16le 2ch 48000Hz Channel Map: front-left,front-right Owner Module: 7 Mute: no Volume: front-left: 99957 / 153% / 11,00 dB, front-right: 99957 / 153% / 11,00 dB balance 0,00 Base Volume: 65687 / 100% / 0,06 dB Monitor Source: alsa_output.usb-0d8c_000c-00-U0xd8c0x0c.analog-stereo.monitor Latency: 0 usec, configured 0 usec Flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY Properties: alsa.resolution_bits = "16" device.api = "alsa" device.class = "sound" alsa.class = "generic" alsa.subclass = "generic-mix" alsa.name = "USB Audio" alsa.id = "USB Audio" alsa.subdevice = "0" alsa.subdevice_name = "subdevice #0" alsa.device = "0" alsa.card = "1" alsa.card_name = "USB Device 0xd8c:0x0c" alsa.long_card_name = "USB Device 0xd8c:0x0c at usb-0000:04:00.0-1.1, full speed" alsa.driver_name = "snd_usb_audio" device.bus_path = "pci-0000:04:00.0-usb-0:1.1:1.0" sysfs.path = "/devices/pci0000:00/0000:00:1c.3/0000:04:00.0/usb2/2-1/2-1.1/2-1.1:1.0/sound/card1" udev.id = "usb-0d8c_000c-00-U0xd8c0x0c" device.bus = "usb" device.vendor.id = "0d8c" device.vendor.name = "C-Media Electronics, Inc." device.product.id = "000c" device.product.name = "Audio Adapter" device.serial = "0d8c_000c" device.string = "front:1" device.buffering.buffer_size = "17632" device.buffering.fragment_size = "4408" device.access_mode = "mmap" device.profile.name = "analog-stereo" device.profile.description = "Stéréo analogique" device.description = "Audio Adapter Stéréo analogique" alsa.mixer_name = "USB Mixer" alsa.components = "USB0d8c:000c" module-udev-detect.discovered = "1" device.icon_name = "audio-card-usb" Ports : analog-output-speaker: Speakers (priority: 10000) Port actif : analog-output-speaker Formats: pcm Sink #2 State: RUNNING Name: ladspa_output.mbeq_1197.mbeq Description: LADSPA Plugin Multiband EQ on Audio interne Digital Stereo (HDMI) Driver: module-ladspa-sink.c Sample Specification: float32le 2ch 44100Hz Channel Map: front-left,front-right Owner Module: 20 Mute: no Volume: front-left: 26212 / 40%, front-right: 26212 / 40% balance 0,00 Base Volume: 65536 / 100% Monitor Source: ladspa_output.mbeq_1197.mbeq.monitor Latency: 9310 usec, configured 10000 usec Flags: HW_MUTE_CTRL LATENCY Properties: device.master_device = "alsa_output.pci-0000_00_1b.0.hdmi-stereo" device.class = "filter" device.ladspa.module = "mbeq_1197" device.ladspa.label = "mbeq" device.ladspa.name = "Multiband EQ" device.ladspa.maker = "Steve Harris <steve@plugin.org.uk>" device.ladspa.copyright = "GPL" device.ladspa.unique_id = "1197" device.description = "LADSPA Plugin Multiband EQ on Audio interne Digital Stereo (HDMI)" device.icon_name = "audio-card" Formats: pcm
La nouvelle implémentation du serveur audio PulseAudio utilise « timer-based audio scheduling » au lieu de l’approche traditionnelle, « interrupt-driven » et ainsi les paramètres « buffer_size/fragment_size » ne sont pas pris en compte .
Afin de mettre hors fonction le « timer-based scheduling » ajouter tsched=0 dans /etc/pulse/default.pa:
sudo nano /etc/pulse/default.pa
load-module module-udev-detect tsched=0
Le « Timer-based scheduling » peut mettre en évidence des problèmes avec certains pilotes ALSA. D’un autre coté, d’autre pilotes peuvent être « glitchy » sans celle-ci, donc vérifier ce qui fonctionne sur votre système.
Veuillez prendre en note les valeurs affectées aux paramètres « buffer_size » et « fragment_size » pour la carte ciblée par les ajustements.
Calculez vos valeurs de « fragment size » en msecs et « number of fragments » (2/4)
La valeur par défaut de la fréquence d’échantillonnage et de la résolution de PulseAudio sont 44100Hz @ 16 bits.
Avec cette configuration, le train de donnée requis est: 44100*16 = 705600 bits par seconde. Cela donne 1411200 bps pour la stéréo.
Reprenons les valeurs de nos paramètres relevés lors des étapes précédentes:
device.buffering.buffer_size = "768000" => 768000/1411200 = 0.544217687075s = 544 msecs device.buffering.fragment_size = "384000" => 384000/1411200 = 0.272108843537s = 272 msecs
Modifier le fichier de configuration de PulseAudio (3/4)
sudo nano /etc/pulse/daemon.conf
; default-fragments = X ; default-fragment-size-msec = Y
À l’étape précédente, nous avons calculé le « fragment size ». Le nombre de fragments est simplement « buffer_size/fragment_size », ce qui nous donne dans ce cas-ci (544/272) donc 2:
default-fragments = 2 default-fragment-size-msec = 272
Redémarrage du serveur PulseAudio (4/4)
pulseaudio -k
pulseaudio --start
Certaine carte de son Intel utilisent le module snd-hda-intel et nécessite les options: vid=8086 pid=8ca0 snoop=0. Afin de rendre l’utilisation de ces options permanentes, créer ou modifier le fichier suivant et ajouter la ligne de configuration.
sudo nano /etc/modprobe.d/sound.conf
options snd-hda-intel vid=8086 pid=8ca0 snoop=0
Redémarrer le serveur PulseAudio:
pulseaudio -k
pulseaudio --start
Si on utilise une sortie ALSA directement autre que sysdefault:CARD=Audio alors là j’ai eu un problème de vitesse de lecture du fichier (tonal pitch) mais qui semble résolu avec le passage à Jessie (Debian)
De plus, comme ALSA prends le contrôle de la sortie audio, tous ce qui transite par PULSE ne passe plus jusqu’à ce que Squeezelite soit arrêté.
Problème avec BOSE Compagnion 5
De façon intermittente le son ne se rend plus à mes haut-parleurs BOSE. Je dois débrancher l’USB ou le câble électrique AC pour que le son revienne.
Le problème de déconnexion du kit de Bose est généralisé à tout le système et pas seulement à l’utilisation de Squeezelite.
Voici une solution que j’ai essayé face au problème de déconnexion du kit Bose sur un système Debian-Ubuntu mais finalement ça ne fonctionne pas. J’ai encore eu des déconnexions. Voir plus bas pour la mise en place d’une solution « Plaster »
Désactiver la fonction de mise en veille de l’USB
Afin de voir le mode actif (on recherche -1 pour la fonction desactivé)
sudo su
cat /sys/module/usbcore/parameters/autosuspend
2Si le résultat est n’est pas -1 alors on poursuit avec les commandes suivantes:
echo "options usbcore autosuspend=-1" | tee /etc/modprobe.d/disable-usb-autosuspend.conf > /dev/null
Pour connaître le noyau actif de votre système:
uname -r
dpkg-reconfigure linux-image-3.16.0-4-amd64
On redémarre l’ordinateur et on revérifie ensuite:
cat /sys/module/usbcore/parameters/autosuspend
-1
Script de reconnexion de l’USB (Plaster)
By roman10
Premièrement obtenir le chemin du périphérique USB à rebrancher. Lancer la commande lsusb
dans un terminal, vous obtiendrez quelque chose de similaire à ceci,
Bus 004 Device 005: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse Bus 004 Device 004: ID 05a7:1020 Bose Corp. Bus 004 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver Bus 004 Device 003: ID 1a40:0201 Terminus Technology Inc. FE 2.1 7-port Hub Bus 004 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 002: ID 05e3:0612 Genesys Logic, Inc. Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 003: ID 14cd:121c Super Top microSD card reader Bus 001 Device 002: ID 05e3:0610 Genesys Logic, Inc. 4-port hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 004: ID 13d3:5205 IMC Networks Bus 003 Device 003: ID 0cf3:3005 Atheros Communications, Inc. AR3011 Bluetooth Bus 003 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
L’élément Bose Corp. est la carte de son en question, le nœud du périphérique est /dev/bus/usb/004/004, le premier 004 est le numéro de BUS, et le second 004 est le numéro du périphérique.
Deuxièmement, appliquer ioctl pour réinitialiser le périphérique. Ceci est réalisé en code C,
Copier ce qui suit dans un nouveau fichier:
#include <stdio.h> #include <fcntl.h> #include <errno.h> #include <sys/ioctl.h> #include <linux/usbdevice_fs.h> void main(int argc, char **argv) { const char *filename; int fd; filename = argv[1]; fd = open(filename, O_WRONLY); ioctl(fd, USBDEVFS_RESET, 0); close(fd); return; }
Sauvegarder le fichier sous le nom: reset.c, compiler ensuite le code avec la commande:
gcc -o reset reset.c
Un programme nommé reset sera alors compilé.
Lancé la commande:
sudo ./reset /dev/bus/usb/004/004
Comme la connexion usb peut changer lors du redémarrage de l’ordinateur, il est plus simple de faire un script qui trouvera le bon numéro de BUS et périphérique à partir de l’identification du périphérique Bose (05a7:1020) que l’on obtient lors de l’exécution de la commande lsusb.
Éditer un nouveau fichiers: reset_Bose.sh
Insérer le code suivant dans celui-ci:
str=$(lsusb | grep -Ze "05a7:1020" | cut -d: -f1) str1=$(echo $str | (cut -c5-7)) str2=$(echo $str | (cut -c16-18)) echo $str1"/"$str2 gksudo ./reset "/dev/bus/usb/"$str1"/"$str2
Lancer alors le script reset_Bose.sh lorsque le Bose ne fonctionnera plus et hop le voici de retour.
merci à roman10 pour le code C, le reste pour le script je l’ai imaginé moi-même!
Pour contourner le problème de déconnexion, j’ai testé le DAC XMOS sur ma distribution SolydX.Le problème de craquements avec pulse est toujours présent, mais je n’ai pas eu de problème « pitch » lorsque j’utilisai directement ALSA (./squeezelite-x86-64 -o sysdefault:CARD=X20).
J’ai donc débranché l’USB du BOSE pour le brancher dans le XMOS, J’utilise ensuite la sortie analogique du XMOS pour alimenter l’entrée analogique du kit BOSE. Le son est correct et ainsi le problème de déconnexion intermittent du driver BOSE semble évité mais je n’aime pas vraiment cette solution. Je songe à ouvrir le kit bose à la fin de la garantie pour y installer le XMOS. J’ai démonté le Bose pour voir la possibilité d’y installer le XMOS, mais j’oublie ça il n’y a pas de place et je n’ai pas les schémas des circuits pour aller plus loin.
XMOS DAC XMOS