{"id":6608,"date":"2024-12-22T14:35:01","date_gmt":"2024-12-22T13:35:01","guid":{"rendered":"https:\/\/olivier.hoarau.site\/?p=6608"},"modified":"2024-12-22T15:04:36","modified_gmt":"2024-12-22T14:04:36","slug":"diffusion-audio-multicanal-5-1-et-bluetooth","status":"publish","type":"post","link":"https:\/\/olivier.hoarau.org\/?p=6608","title":{"rendered":"Diffusion audio multicanal 5.1 et bluetooth"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">J&rsquo;envoie r\u00e9guli\u00e8rement l&rsquo;audio  de mon ordinateur portable Thinkpad vers ma barre de son en <strong>bluetooth<\/strong>. Alors que celle-ci dispose de toutes les fonctionnalit\u00e9s audio surround, dolby, DTX, 5.1, etc, \u00e7a me d\u00e9sole d&rsquo;envoyer simplement en st\u00e9r\u00e9o alors que je pourrais faire mieux.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D&rsquo;o\u00f9 mes recherches pour pouvoir envoyer un son plus qualitatif. Au fil de mes recherches je d\u00e9couvre qu&rsquo;il existe principalement 2 technologies de diffusion audio <strong>bluetooth<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>L&rsquo;<a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_Bluetooth_profiles#Advanced_Audio_Distribution_Profile_(A2DP)\">A2DP<\/a> (Advanced Audio Distribution Profile) est celle qu&rsquo;on retrouve sur tous les p\u00e9riph\u00e9riques <strong>bluetooth<\/strong> actuels. Elle permet une sortie audio st\u00e9r\u00e9o (qu&rsquo;on retrouve sous le terme <strong>sink<\/strong>). Elle utilise en natif le codec audio <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Low_Complexity_Subband_Codec\">SBC<\/a> qui fournit une qualit\u00e9 audio juste acceptable (r\u00e9f\u00e9rences <a href=\"http:\/\/soundexpert.org\/articles\/-\/blogs\/audio-quality-of-sbc-xq-bluetooth-audio-codec\">ici<\/a> et <a href=\"http:\/\/soundexpert.org\/encoders-320-kbps\">l\u00e0<\/a>). Aussi d&rsquo;autres codecs ont fait leur apparition, <strong>SBC XQ<\/strong> qui est une version am\u00e9lior\u00e9e de SBC, mais \u00e9galement <a href=\"https:\/\/en.wikipedia.org\/wiki\/LDAC_(codec)\">LDAC<\/a>, <a href=\"https:\/\/en.wikipedia.org\/wiki\/AptX\">Aptx<\/a>, <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Advanced_Audio_Coding\">AAC<\/a> ou <a href=\"https:\/\/en.wikipedia.org\/wiki\/LC3_(codec)\">LC3<\/a>.<a href=\"https:\/\/www.frandroid.com\/comment-faire\/comment-fonctionne-la-technologie\/752329_aptx-ldac-sbc-tout-comprendre-aux-codecs-bluetooth-audio\">  Cette page<\/a>, <a href=\"https:\/\/www.audiophonics.fr\/fr\/blog-diy-audio\/45-les-differents-codecs-bluetooth-acc-sbc-aptx-ldac.html\">celle l\u00e0<\/a> et <a href=\"https:\/\/www.clubic.com\/audio-hifi\/article-878271-1-comprendre-codecs-bluetooth.html\">cette derni\u00e8re page<\/a> expliquent tr\u00e8s bien les subtilit\u00e9s qui peuvent exister entre eux. Cette technologie est associ\u00e9e \u00e0 <strong>AVRCP<\/strong> (Audio Video Remote Control Profile) qui permet de g\u00e9rer les commandes.<\/li>\n\n\n\n<li><strong>LE Audio <\/strong>associ\u00e9 au <a href=\"https:\/\/en.wikipedia.org\/wiki\/Bluetooth_Low_Energydia.org\/wiki\/Bluetooth_Low_Energy\">Bluetooth<\/a><a href=\"https:\/\/en.wikipedia.org\/wiki\/Bluetooth_Low_Energy\"> Low Energy (BLE<\/a>) est un mode basse consommation qui utilise le codec <strong>LC3<\/strong> qui \u00e0 terme devrait \u00e9quiper tous les p\u00e9riph\u00e9riques bluetooth. Ce mode permettra la diffusion vers plusieurs p\u00e9riph\u00e9riques bluetooth et de pouvoir utiliser la diffusion multicanal 5.1 contrairement aux autres codecs pr\u00e9c\u00e9demment cit\u00e9s qui sont limit\u00e9s au mono et au st\u00e9r\u00e9o.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Or en connectant ma barre de son \u00ab\u00a0Abri de jardin\u00a0\u00bb (je sais, c&rsquo;est bizarre&#8230;) avec <strong>blueman<\/strong>, je me rends compte que je n&rsquo;ai acc\u00e8s qu&rsquo;au codec standard <strong>SBC<\/strong> et \u00e0 sa version am\u00e9lior\u00e9e <strong>SBC XQ<\/strong>. Pas moyen d&rsquo;avoir un codec plus qualitatif.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/blueman-1.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"474\" height=\"240\" src=\"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/blueman-1.jpg?resize=474%2C240&#038;ssl=1\" alt=\"\" class=\"wp-image-6609\" srcset=\"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/blueman-1.jpg?w=910&amp;ssl=1 910w, https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/blueman-1.jpg?resize=300%2C152&amp;ssl=1 300w, https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/blueman-1.jpg?resize=768%2C389&amp;ssl=1 768w\" sizes=\"auto, (max-width: 474px) 100vw, 474px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ni une, ni deux, je me lance dans l&rsquo;installation du serveur audio <strong>pipewire<\/strong> car <strong>pulseaudio<\/strong> install\u00e9 de base sur ma Mageia 9 ne g\u00e8re que l&rsquo;<strong>A2DP<\/strong> et ne g\u00e8re pas le <strong>LE Audio<\/strong>.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\">Je bascule sous <strong>pipewire<\/strong> fourni sur mon syst\u00e8me avec l&rsquo;outil <strong>pa-switcher<\/strong> et je constate aucune \u00e9volution avec <strong>blueman<\/strong> et j&rsquo;ai toujours les m\u00eames codecs, je choisis d&rsquo;installer la derni\u00e8re version de <strong>pipewire<\/strong> \u00e0 partir des sources. Avant cela, j&rsquo;ai install\u00e9 les codecs suppl\u00e9mentaires. Tout d&rsquo;abord <strong>LC3<\/strong> qu&rsquo;on r\u00e9cup\u00e9rera <a href=\"https:\/\/github.com\/google\/liblc3\">ici<\/a>. On tape ensuite les commandes suivantes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tar xvfz liblc3-1.1.1.tar.gz\ncd liblc3-1.1.1\nmeson setup build\ncd build<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">et en tant que root<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>meson install<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On passe \u00e0 <strong>Aptx<\/strong> qu&rsquo;on r\u00e9cup\u00e8re sur <a href=\"https:\/\/github.com\/iamthehorker\/libfreeaptx\">ce site<\/a>. On tape ensuite les commandes<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tar xvfz libfreeaptx-0.1.1.tar.gz\nlibfreeaptx-0.1.1\nmake<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Et en tant que root<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>make install<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;ai install\u00e9 par ailleurs les packages suivants <strong>bluez-devel<\/strong>, <strong>sbc<\/strong>, <strong>lib64sbc-devel<\/strong>, <strong>lib64mysofa-devel<\/strong> et <strong>lib64ldac-devel<\/strong>. Pour <strong>pipewire<\/strong>, on le r\u00e9cup\u00e8re sur <a href=\"https:\/\/pipewire.org\/\">ce site<\/a>. On tape les commandes :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tar xvfj pipewire-1.2.6.tar.bz2\npipewire-1.2.6\n.\/autogen.sh --prefix=\/usr\/local<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Et voil\u00e0 le r\u00e9sultat<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pipewire 1.2.6\n\n    systemd conf data                       : YES\n    libsystemd                              : YES\n    logind                                  : YES\n    libselinux                              : NO\n    intl support                            : YES\n    pipewire-alsa                           : YES\n    OpenSSL (for raop-sink)                 : YES\n    lilv (for lv2 plugins)                  : NO\n    ffado                                   : NO\n    RLIMITs                                 : with limits.d file affecting matching PAM users\n    PAM defaults                            : without limits.d file affecting all PAM users (not needed with modern systemd or kernel)\n    Documentation                           : NO\n    Man pages                               : NO\n\n  Misc dependencies\n    dbus (Bluetooth, rt, portal, pw-reserve): YES\n    SDL2 (video examples)                   : YES\n    opus (Bluetooth, RTP)                   : YES\n    readline (for pw-cli)                   : YES\n    X11 (x11-bell)                          : YES\n    libcanberra (x11-bell)                  : NO\n    GLib-2.0 (Flatpak support)              : YES\n    GIO (GSettings)                         : YES\n    WebRTC Echo Canceling &lt; 1.0             : NO\n    GLib-2.0 (Snap support)                 : YES\n    Gio-2.0 (Snap support)                  : YES\n    Apparmor (Snap support)                 : NO\n    Snapd-glib (Snap support)               : NO\n    Vulkan                                  : NO\n\n  pw-cat\/pw-play\/pw-dump\/filter-chain\n    sndfile                                 : YES\n\n  filter-chain\n    libmysofa                               : YES\n\n  Streaming between daemons\n    libpulse                                : YES\n    Avahi DNS-SD (Zeroconf)                 : NO\n    Opus with custom modes for NetJack2     : YES\n    ROC                                     : NO\n\n  Backend\n    libusb (Bluetooth quirks)               : YES\n    gstreamer-device-provider               : YES\n    gstreamer DMA_DRM support               : NO\n    JACK2                                   : NO\n    ALSA                                    : YES\n    Bluetooth audio                         : YES\n    libcamera                               : NO\n    Compress-Offload                        : YES\n    Udev                                    : YES\n    V4L2 kernel header                      : YES\n    V4L2 enabled                            : YES\n\n  GStreamer modules\n    glib-2.0                                : YES\n    gobject-2.0                             : YES\n    gmodule-2.0                             : YES\n    gio-2.0                                 : YES\n    gio-unix-2.0                            : YES\n    gstreamer-1.0                           : YES\n    gstreamer-base-1.0                      : YES\n    gstreamer-video-1.0                     : YES\n    gstreamer-audio-1.0                     : YES\n    gstreamer-allocators-1.0                : YES\n\n  Bluetooth audio codecs\n    SBC                                     : YES\n    LDAC                                    : YES\n    LDAC ABR                                : YES\n    aptX                                    : YES\n    AAC                                     : YES\n    LC3plus                                 : NO\n    Opus                                    : YES\n    LC3                                     : YES\n\n  Bluetooth backends\n    ModemManager                            : NO\n\n  Optional programs\n    find (for header testing)               : YES\n    valgrind (test setup)                   : YES\n\n  Session managers\n    Build media-session                     : NO\n    Build wireplumber                       : YES\n    Default session-manager                 : wireplumber\n\n  pw-cat\/pw-play\/pw-dump tool\n    Build pw-cat tool                       : YES\n    Build pw-cat with FFmpeg integration    : NO\n\n  Optional Modules\n    jack-tunnel                             : NO\n    ffado-driver                            : NO\n    rt                                      : with RTKit\n    portal                                  : YES\n    pulse-tunnel                            : YES\n    zeroconf-discover                       : NO\n    raop-discover (needs Avahi)             : NO\n    snapcast-discover (needs Avahi)         : NO\n    raop-sink (requires OpenSSL)            : YES\n    roc-sink                                : NO\n    roc-source                              : NO\n    x11-bell                                : NO\n    avb                                     : YES\n\n  Functional test programs\n    openal-info                             : NO\n    pactl                                   : YES\n\n  Subprojects\n    lua                                     : YES (from wireplumber)\n    wireplumber                             : YES\n\n  User defined options\n    prefix                                  : \/usr\/local<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;avoue que je n&rsquo;ai pas trouv\u00e9 les sources de <strong>LC3plus<\/strong>, mais peu importe avec les autres codecs c&rsquo;est d\u00e9j\u00e0 largement suffisant pour continuer. On tape ensuite <strong>make<\/strong> puis en tant que root <strong>make install<\/strong>. L&rsquo;installation se fait sous <strong>\/usr\/local<\/strong>, ce qui \u00e9vite d&rsquo;\u00e9craser l&rsquo;installation syst\u00e8me. On stoppe d\u00e9j\u00e0 les processus <strong>pipewire<\/strong> syst\u00e8me en tapant :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl --user stop pipewire\nsystemctl --user stop pipewire.socket\nsystemctl --user stop pipewire-pulse\nsystemctl --user stop pipewire-pulse.socket<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Et on lance maintenant les commandes ci-dessous, chacune  dans un terminal distinct :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/usr\/local\/bin\/pipewire\n\/usr\/local\/bin\/pipewire-pulse\n\/usr\/local\/bin\/wireplumber -c \/usr\/local\/share\/wireplumber\/wireplumber.conf<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Et voil\u00e0 le r\u00e9sultat pour la derni\u00e8re commande<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSource\/ldac\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSink\/aptx_hd\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSource\/aptx_hd\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSink\/aptx\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSource\/aptx\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSink\/aac\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSource\/aac\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSink\/opus_g\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSource\/opus_g\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSink\/sbc\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSource\/sbc\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSource\/aptx_ll_1\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSource\/aptx_ll_0\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSource\/aptx_ll_duplex_1\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSource\/aptx_ll_duplex_0\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSource\/faststream\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSource\/faststream_duplex\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSink\/opus_05\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSource\/opus_05\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSink\/opus_05_duplex\nd\u00e9c. 22 12:12:57 cilaos.kervao.fr bluetoothd&#91;857]: Endpoint registered: sender=:1.197 path=\/MediaEndpoint\/A2DPSource\/opus_05_duplex<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">C&rsquo;est tout bon en ce qui concerne les nouveaux codecs. Et l\u00e0 je constate avec d\u00e9sappointement que <strong>blueman<\/strong> ne m&rsquo;offre pas mieux, je recompile donc <strong>bluez<\/strong> qui fournit le daemon <strong>bluetoothd<\/strong> qu&rsquo;on trouvera <a href=\"https:\/\/www.bluez.org\/\">ici<\/a>.  Je l&rsquo;installe en tapant les commandes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tar xvf bluez-5.66.tar.xz\ncd bluez-5.66\/\n.\/configure --enable-experimental\nmake<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">puis en tant que root <strong>make install<\/strong>. On modifie le fichier de configuration<strong> \/etc\/bluetooth\/main.conf<\/strong> pour que <strong>LE Audio <\/strong>soit bien en compte, en modifiant les lignes suivantes :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Enables D-Bus experimental interfaces\n# Possible values: true or false\nExperimental = true\n\n# Enables kernel experimental features, alternatively a list of UUIDs\n# can be given.\n# Possible values: true,false,&lt;UUID List>\n# Possible UUIDS:\n# d4992530-b9ec-469f-ab01-6c481c47da1c (BlueZ Experimental Debug)\n# 671b10b5-42c0-4696-9227-eb28d1b049d6 (BlueZ Experimental Simultaneous Central and Peripheral)\n# 15c0a148-c273-11ea-b3de-0242ac130004 (BlueZ Experimental LL privacy)\n# 330859bc-7506-492d-9370-9a6f0614037f (BlueZ Experimental Bluetooth Quality Report)\n# a6695ace-ee7f-4fb9-881a-5fac66c629af (BlueZ Experimental Offload Codecs)\n6fbaf188-05e0-496a-9885-d6ddfdb4e03e (BlueZ Experimental ISO socket)\n# Defaults to false.\nKernelExperimental = true<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Et l\u00e0 je me retrouve avec une installation hybride entre une installation syst\u00e8me et local <strong>bluez<\/strong> et <strong>pipewire<\/strong> avec un mix de fichiers et les services <strong>systemd<\/strong> des versions locales qui ont \u00e9cras\u00e9 les versions syst\u00e8me. Au reboot du PC, c&rsquo;est bien par d\u00e9faut les binaires locaux qui sont lanc\u00e9s, pour v\u00e9rifier cela il suffit de taper<strong> systemctl &#8211;user status pipewire <\/strong>et voil\u00e0 le r\u00e9sultat<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u25cf pipewire.service - PipeWire Multimedia Service\n     Loaded: loaded (\/usr\/local\/lib\/systemd\/user\/pipewire.service; enabled; preset: disabled)\n     Active: active (running) since Sun 2024-12-22 12:20:23 CET; 1h 23min ago\nTriggeredBy: \u25cf pipewire.socket\n   Main PID: 6430 (pipewire)\n      Tasks: 3 (limit: 9205)\n     Memory: 9.9M\n        CPU: 6.371s\n     CGroup: \/user.slice\/user-5001.slice\/user@5001.service\/session.slice\/pipewire.service\n             \u2514\u25006430 \/usr\/local\/bin\/pipewire\n\nd\u00e9c. 22 12:20:23 cilaos.kervao.fr systemd&#91;6414]: Started pipewire.service.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Et voil\u00e0 ce que donne <strong>systemctl &#8211;user status wireplumber<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u25cf wireplumber.service - Multimedia Service Session Manager\n     Loaded: loaded (\/usr\/local\/lib\/systemd\/user\/wireplumber.service; enabled; preset: disabled)\n     Active: active (running) since Sun 2024-12-22 12:20:23 CET; 1h 24min ago\n   Main PID: 6431 (wireplumber)\n      Tasks: 6 (limit: 9205)\n     Memory: 7.1M\n        CPU: 38.317s\n     CGroup: \/user.slice\/user-5001.slice\/user@5001.service\/session.slice\/wireplumber.service\n             \u2514\u25006431 \/usr\/local\/bin\/wireplumber -c \/usr\/local\/share\/wireplumber\/wireplumber.conf\n\nd\u00e9c. 22 12:20:23 cilaos.kervao.fr systemd&#91;6414]: Started wireplumber.service.\nd\u00e9c. 22 12:20:23 cilaos.kervao.fr wireplumber&#91;6431]: wp-internal-comp-loader: Loading profile 'main'\nd\u00e9c. 22 12:20:23 cilaos.kervao.fr wireplumber&#91;6431]: wp-device: SPA handle 'api.libcamera.enum.manager' could not be loaded; is it installed?\nd\u00e9c. 22 12:20:23 cilaos.kervao.fr wireplumber&#91;6431]: s-monitors-libcamera: PipeWire's libcamera SPA plugin is missing or broken. Some camera types may not be supported.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Je ne pr\u00eate pas attention au dernier warning, car je n&rsquo;ai pas compil\u00e9 <strong>pipewire<\/strong> avec <strong>libcamera<\/strong>. Et en tant que root si je tape <strong>systemctl status bluetooth<\/strong>, j&rsquo;obtiens :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u25cf bluetooth.service - Bluetooth service\n     Loaded: loaded (\/usr\/lib\/systemd\/system\/bluetooth.service; enabled; preset: enabled)\n     Active: active (running) since Sun 2024-12-22 12:19:47 CET; 1h 8min ago\n       Docs: man:bluetoothd(8)\n   Main PID: 850 (bluetoothd)\n     Status: \"Running\"\n      Tasks: 1 (limit: 9205)\n     Memory: 3.2M\n        CPU: 1.517s\n     CGroup: \/system.slice\/bluetooth.service\n             \u2514\u2500850 \/usr\/local\/libexec\/bluetooth\/bluetoothd<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dans un premier temps j&rsquo;avais erreur comme quoi <strong>wireplumber<\/strong> ne trouvait pas les codecs, j&rsquo;ai d\u00fb en tant que root taper :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mv \/usr\/share\/pipewire \/usr\/share\/pipewire.system\nln -s \/usr\/local\/share\/pipeline \/usr\/share<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Puis ensuite il me disait que ma barre de son \u00e9tait d\u00e9j\u00e0 connect\u00e9e et pas moyen de l&rsquo;utiliser, j&rsquo;ai d\u00fb totalement r\u00e9initialis\u00e9 la connexion avec la commande <strong>bluetoothctl<\/strong> avec mon p\u00e9riph\u00e9rique qui a l&rsquo;identit\u00e9 AC:F1:08:56:5C:DF en tapant au prompt les commandes suivantes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>untrust AC:F1:08:56:5C:DF\nremove AC:F1:08:56:5C:DF\nscan on\nscan off\npair AC:F1:08:56:5C:DF<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Au bout de toutes ces p\u00e9r\u00e9grinations je connecte ma barre de son avec <strong>blueman<\/strong> et je constate avec d\u00e9pit que j&rsquo;en suis au m\u00eame stade avec <strong>SBC<\/strong> et <strong>SBC XQ <\/strong>comme codecs. En dernier ressort, je compile <strong>blueman<\/strong>, mais \u00e7a ne change rien \u00e0 l&rsquo;affaire.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je me tourne vers les sp\u00e9cifications de ma barre de son<strong> LG SL10YG<\/strong> et ce n&rsquo;est qu&rsquo;\u00e0 ce moment l\u00e0 que je comprends que les modes multicanaux ne marchent que via l&rsquo;interface <strong>HDMI<\/strong> et qu&rsquo;elle se repose sur <strong>Bluetooth 4.2 <\/strong>qui ne prend pas en charge le <strong>LE Audio<\/strong> (qui arrive avec la version 5.2). J&rsquo;aurais d\u00fb commencer par l\u00e0 !!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D&rsquo;ailleurs la commande <strong>bluetoothctl info <\/strong>me renvoie :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">j&rsquo;aurais du avoir quelque chose comme :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>UUUUID: Published Audio Capabilities (00001850-0000-1000-8000-00805f9b34fb)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Fin du sketch qui m&rsquo;aura pris quelques heures et qui m&rsquo;a permis de passer \u00e0 <strong>pipewire<\/strong> et de d\u00e9couvrir son fonctionnement. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mon installation est stable dans cet \u00e9tat, mais pour revenir en arri\u00e8re, il faut d\u00e9sinstaller les installations locales de <strong>pipewire<\/strong> et <strong>bluetooth<\/strong>  (<strong>make uninstall <\/strong>dans les r\u00e9pertoires d&rsquo;installation) et r\u00e9installer les packages <strong>pipewire<\/strong> et <strong>bluetooth<\/strong> avec la commande <strong>urpmi &#8211;replacepkgs &#8211;force<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;envoie r\u00e9guli\u00e8rement l&rsquo;audio de mon ordinateur portable Thinkpad vers ma barre de son en bluetooth. Alors que celle-ci dispose de toutes les fonctionnalit\u00e9s audio surround, dolby, DTX, 5.1, etc, \u00e7a me d\u00e9sole d&rsquo;envoyer simplement en st\u00e9r\u00e9o alors que je pourrais faire mieux. D&rsquo;o\u00f9 mes recherches pour pouvoir envoyer un son plus qualitatif. Au fil de &hellip; <a href=\"https:\/\/olivier.hoarau.org\/?p=6608\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Diffusion audio multicanal 5.1 et bluetooth<\/span>  <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false,"_share_on_mastodon":"0"},"categories":[5],"tags":[44,107],"class_list":["post-6608","post","type-post","status-publish","format-standard","hentry","category-logiciels-libres","tag-audio","tag-pipewire"],"share_on_mastodon":{"url":"https:\/\/mastodon.social\/@funix\/113696735410276365","error":""},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/peOjJ-1IA","jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts\/6608","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6608"}],"version-history":[{"count":8,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts\/6608\/revisions"}],"predecessor-version":[{"id":6617,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts\/6608\/revisions\/6617"}],"wp:attachment":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6608"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6608"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6608"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}