Depuis Mac OS X 10.5, Apple supporte les appareils Bluetooth à la norme A2DP, qui permet de la diffusion en stéréo. Mais dans beaucoup de cas, la qualité est assez moyenne sous Mac OS X (pour ne pas dire mauvaise). Avec cette astuce, il est possible d’améliorer dans certains cas la qualité du flux.
Pour bien comprendre, il faut d’abord voir comment l’A2DP fonctionne. La technologie recompresse le son dans un codec maison, le SBC, et envoie le flux au casque, qui décompresse. On a donc une dégradation obligatoire du son, contrairement à une solution comme AirPlay qui transmet en ALAC. Techniquement, il est possible de transmettre directement du son déjà compressé (par exemple en AAC) mais aucun périphérique ne le permet à ma connaissance.
Le débit binaire du flux compressé dépend de plusieurs choses, et est variable. La première chose, c’est le périphérique : tous les appareils ne supportent pas les mêmes débits. Dans mes quelques tests (cinq appareils), le bitpool maximal varie de 44 à 64.
La relation entre bitpool et bitrate n’est pas très claire, mais voici quelques valeurs données par le consortium Bluetooth : 19 correspond à du 128 kilobits/s, 35 à du 235 kilobits/s, 53 à du 328 kilobits/s. Sachant que le SBC est significativement moins bon que du MP3, ça reste assez moyen.
La seconde chose, c’est le nombre d’appareils Bluetooth : si vous avez beaucoup de périphériques, la bande passante est saturée et le débit binaire diminue automatiquement (dans une certaine limite). Si vous avez beaucoup d’appareils, vous risquez de recevoir ce genre de messages :
Dans mon cas, je l’ai eu alors que j’avais quatre appareils connectés : un clavier, un pavé numérique, une souris, un trackpad. De fait, le son était saccadé, et débrancher la souris a réglé les choses.
Le dernier point, sur lequelle nous allons jouer, ce sont les paramètres de Mac OS X. Par défaut, Mac OS X peut faire varier le débit entre un bitpool de 2 et un bitpool de 64, avec une initialisation à 30. En fixant une valeur minimale élevée, il est donc possible d’empêcher le système de dégrader le son et donc améliorer la qualité globale. Il y a deux défauts : il faut une réception correcte (oublier si vous avez comme moi d’autres appareils connectés) et que votre périphérique supporte un débit élevé.
La première chose à faire est de vérifier si votre appareils supporte un débit élevé. Il faut donc le jumeler, lancer de la musique (important) et ensuite lancer une fenêtre Terminal.
defaults read com.apple.BluetoothAudioAgent
Le résultat (ici pour un Motorola S9) donne quelques informations.
{
"Apple Bitpool Max (editable)" = 64;
"Apple Bitpool Min (editable)" = 2;
"Apple Initial Bitpool (editable)" = 30;
"Negotiated Bitpool" = 30;
"Negotiated Bitpool Max" = 44;
"Negotiated Bitpool Min" = 2;
"Stream - Flush Ring on Packet Drop (editable)" = 0;
"Stream - Max Outstanding Packets (editable)" = 30;
"Warned about audio bandwidth" = 1;
}
Les trois premières valeurs sont les paramètres Apple. La suivante est le débit actuel, les deux suivantes les capacités de l’appareil. On voit par exemple que le casque Motorola est assez mauvais, avec seulement un bitpool de 44. C’est une valeur importante, dans le sens ou il ne faut évidemment pas fixer une valeur plus élevée que celle là.
Dans mes tests, le Motorola S9 est à 44, un casque Sony DR-BT21G à 53, une oreillette Sony Ericsson HBH-DS200 à 64, un récepteur Sony Ericsson MBR-100 à 55 et une enceinte Sony Ericcson MBS-100 à 53. On considère que 48 est un son de bonne qualité et 58 un son de très bonne qualité.
Une fois qu’on a une valeur maximale, il suffit de fixer les paramètres de Mac OS X. Au lieu d’un bitpool minimal de 2, le mieux est de fixer un bitpool minimal de 40 ou 48, en fonction des appareils, et éventuellement de le diminuer en cas de soucis.
defaults write com.apple.BluetoothAudioAgent "Apple Bitpool Min (editable)" 48
Normalement, la différence devrait être audible assez facilement.
« On voit par exemple que le casque Motorola est assez mauvais, avec seulement un bitpool de 44. »
THANK YOU! I wasn’t getting rid of these cracking sounds forever. I tried everything you can find on the internet, but your post was the first to actually tell me that the negotiated bitpool should not be exceeded. Thanks a million! It sounds like a million times better now with these for my Philips SBT75:
« Apple Bitpool Max (editable) » = 53;
« Apple Bitpool Min (editable) » = 48;
« Apple Initial Bitpool (editable) » = 40;
« Negotiated Bitpool » = 48;
« Negotiated Bitpool Max » = 53;
« Negotiated Bitpool Min » = 48;
« Stream – Flush Ring on Packet Drop (editable) » = 30;
« Stream – Max Outstanding Packets (editable) » = 15;
« Stream Resume Delay » = « 0.75 »;
« Stream \\U2013 Flush Ring on Packet Drop (editable) » = 30;
« Stream \\U2013 Max Outstanding Packets (editable) » = 15;
« Warned about audio bandwidth » = 1;