Forcer le bon codec Bluetooth sous macOS

Le Bluetooth, c’est bien pour de l’audio, mais parfois c’est… compliqué. Depuis que Mac OS X supporte l’audio en Bluetooth (A2DP) avec Leopard, Apple change régulièrement certains réglages et tirer le meilleur parti d’un casque Bluetooth est parfois compliqué.

TL;DR : Par défaut, macOS ne tire pas parti de l’AAC ou de l’aptX.

Avant de commencer, un peu d’explications. L’audio en Bluetooth ne permet pas de travailler avec de l’audio sans compression. La version 5 le proposera peut-être mais actuellement, ce n’est pas le cas (août 2018). La liaison entre l’émetteur et le casque passe par une compression avec pertes, et différentes possibilités existent.

Les codecs de la norme

En Bluetooth classique, le débit maximal est de 1 Mb/s, avec une valeur pratique sous les 400 Kb/s. Il existe la possibilité de passer en Bluetooth + EDR pour tripler le débit (3 Mb/s, environ 1 à 1,5 Mb/s en pratique) mais la consommation augmente. Le Bluetooth 5 doit permettre de dépasser ça.

La norme Bluetooth elle-même propose pas mal de choix. Premier codec, obligatoire, le SBC. Ce code peu efficace a l’avantage de consommer peu d’énergie… et c’est à peu près tout. Il utilise un bitrate variable mais généralement entre ~200 et ~350 kbps. La norme propose trois autres codecs par défaut : le MP3, l’AAC et l’Atrac. Le premier est rare en 2018, le second courant, le dernier n’a jamais été utilisé à ma connaissance. MP3 et AAC ont l’avantage de permettre un envoie direct du flux : si vous écoutez un fichier AAC à 256 kbps, il est transmis directement, sans pertes au moment du transfert. Avec le SBC, par exemple, vous avez une recompression d’un fichier déjà compressé (c’est mal).

En plus des codecs standardisés, il existe quelques autres possibilités. Le plus connu est l’aptX : il utilise une compression de type ADPCM avec un débit assez élevé (352 kbps, fixe) et offre un résultat correct. Il est parfois vendu comme sans pertes ou “qualité CD” mais ce n’est pas le cas. Le support de l’aptX dépend du fournisseur du casque et de l’émetteur, dans les deux cas CSR (Qualcomm actuellement) demande des royalties. Dans les autres codecs propriétaires, on peut noter l’aptX HD (24 bits et 48 kHz, plus gros débit), le Fast Stream (basse latence) et le LDAC de Sony, qui utilise le Bluetooth + EDR pour atteindre un débit élevé (990 kbps au mieux) et permettre de l’audio HD (24 bits et 96 kHz) mais toujours avec des pertes.

Dans tous les cas, il y a des pertes et le résultat dépendra du casque, des codecs supportés et de la qualité de la liaison.

Et sous macOS ?

macOS prend en charge le SBC, l’AAC et l’aptX. L’Atrac, le MP3 ou le LDAC ne sont pas disponibles. Par défaut, la compatibilité reste très limitée.

Premièrement, le SBC. Le réglage de base de l’OS utilise un bitpool de 40, c’est-à-dire un débit binaire de l’ordre de 250 kbps. Dans les anciennes versions de Mac OS X, la valeur était plus basse (30). En pratique, il est possible de forcer la valeur plus haut, la majorité des périphériques supporte un bitpool de 53 (328 kb/s) et Apple impose cette valeur aux fabricants d’accessoires.

Un outil Apple, Bluetooth Explorer, permet de modifier les réglages. Il se trouve chez Apple dans la section des outils de développement (dans Additional Tools for Xcode). Une fois lancé, la fenêtre Audio Options (dans le menu Tools) permet de définir la valeur initiale, la valeur minimale et la maximale. C’est possible aussi en ligne de commandes (mais c’est plus simple avec l’interface). Il faut a priori redémarrer pour que les changements s’activent, et méfiez-vous des valeurs. Le 40 d’Apple est assez conservateur car certains appareils bas de gamme ne supportent pas les valeurs élevés. Typiquement, pour un petit gain, forcer le 53 en initial doit fonctionner. C’est la valeur imposée par Apple aux constructeurs et les appareils modernes l’acceptent normalement. Attention, les vieux modèles ne le font pas (j’ai eu un Motorola qui ne dépassait pas 44).

Bluetooth Explorer

Deuxièmement, l’aptX. Techniquement, macOS le prend en charge, mais avec quelques limites invisibles. Je n’ai pas trouvé les valeurs exactes, c’est empirique, mais il a deux limites importantes. La première, c’est que votre Mac doit utiliser du Wi-Fi dans la bande des 5 GHz (ou pas de Wi-Fi). S’il utilise la bande des 2,4 GHz, l’aptX ne s’active pas. Deuxièmement, par défaut, l’aptX ne fonctionne que si le casque est le seul périphérique Bluetooth sur un Mac portable. Sur les Mac de bureau, le système permet un second périphérique Bluetooth. En clair, si vous utilisez une souris et un clavier Bluetooth, c’est mort.

Vous pouvez forcer l’utilisation de l’aptX de deux façons. Soit en utilisant l’utilitaire Bluetooth Explorer avec la case Force use of aptX soit avec la ligne de commande sudo defaults write bluetoothaudiod "Enable AptX codec" -bool true (pas besoin de redémarrer). Attention tout de même, forcer l’aptX n’implique pas que ça va fonctionner : selon les appareils et la distance entre le Mac et le casque, vous risquez des défauts sonores. Typiquement, bouger la souris peut avoir un impact sur l’audio par exemple.

aptX forcé sur un casque Sony

Troisièmement, l’AAC. C’est un peu particulier : par défaut, certains casques passent en AAC directement. C’est le cas avec les AirPods ou avec des écouteurs Beats. Par contre, dans d’autres cas, il faut forcer l’activation de l’AAC. Généralement, le bitrate est de 256 kbps et macOS transmet le flux sans recompression ce qui permet évite les pertes. L’AAC est surtout intéressant si vous écoutez de l’AAC, assez logiquement. En clair, du YouTube ou quelque chose qui vient d’iTunes passera très bien, mais si vous utilisez Spotify ou Deezer (par exemple), le système va recompresser en AAC quelque chose de déjà compressé.

Bluetooth Explorer permet de forcer l’AAC, ce qui l’active avec certains casques. J’ai un modèle Sony en SBC par défaut qui ne passe en AAC que si je force la norme manuellement. La commande sudo defaults write bluetoothaudiod "Enable AAC codec" -bool true fait la même chose.

AAC forcé sur le même casque Sony


AAC par défaut sur les AirPods

Sous iOS

Avec les appareils iOS, Apple ne permet pas vraiment de forcer un codec ni même d’afficher de façon simple le codec utilisé (j’en parle la semaine prochaine). Les appareils iOS ne prennent en charge que le SBC et l’AAC, pas l’aptX.

Pour terminer, donc, il est possible d’obtenir une qualité acceptable en Bluetooth sous macOS, mais ça nécessite parfois de forcer la compatibilité. Et je vous conseille d’aller directement vers un casque qui supporte l’aptX ou l’AAC (c’est assez courant) pour éviter les défauts du SBC. Mais attention, forcer une technologie n’implique pas que ça va fonctionner correctement.