web-dev-qa-db-fra.com

Envoi d'une pause / reprise de la lecture et des commandes Bluetooth de la piste suivante / précédente

J'aimerais que mon PC Ubuntu envoie des commandes audio bluetooth (lecture/pause, chanson suivante/précédente et tourner vers le haut/bas) vers un autre appareil diffusant de la musique via bluetooth. En d'autres termes, je voudrais implémenter mon PC Ubuntu en "faisant semblant" d'être une sorte d'écouteurs Bluetooth, qui sont capables de changer de piste, de mettre en pause et de reprendre la musique.

J'ai la configuration suivante illustrée par les captures d'écran pavucontrol ci-dessous (pt2 l'appareil est-il connecté via Bluetooth): enter image description hereenter image description here

Dans cette configuration, le streaming fonctionne comme prévu (je peux entendre la musique diffusée depuis pt2), mais je n'ai trouvé aucun moyen de lui envoyer un signal tel qu'une pause/reprise de la lecture ou un changement de piste.

J'ai déjà découvert qu'il existe de nombreux protocoles Bluetooth permettant des fonctions spécifiques. Si j'ai bien compris les spécifications, ce qui m'intéresse, c'est l'A2DP, qui est la façon dont les appareils sont connectés maintenant. Mais sous la liste déroulante de profil, j'ai également des options HSP/HFP headset head unit, HSP/HFPheadset gateway and off.

Je vais développer ma propre application en Python qui permettra d'envoyer de telles commandes, donc je suis intéressé à les envoyer via Python ou via les commandes bash).

Je pose cette question parce que je suis intéressé par la façon dont je peux communiquer avec les appareils Bluetooth.

10
pt12lol

Inspiré par @kenn, j'ai décidé d'aller plus loin dans dbus et d-feet outils. Finalement, j'ai atteint mon objectif en utilisant la commande suivante:

dbus-send --system --print-reply --dest=org.bluez /org/bluez/hci0/dev_44_78_3E_85_9D_6F org.bluez.MediaControl1.Play

ce qui a bien sûr déclenché la lecture de musique sur mon appareil mobile connecté à mon PC via Bluetooth.

De manière générique pour les appareils Bluetooth, cette commande ressemblerait à:

dbus-send --system --print-reply --dest=org.bluez /org/bluez/hci0/dev_<mobile_bluetooth_device_mac_address_with_numbers_underscore_separated> org.bluez.MediaControl1.<command_to_send>

Afin de vérifier l'adresse MAC de vos appareils, exécutez bt-devices -l. Il répertoriera tous les périphériques connus (mais pas nécessairement connectés ou même découverts) avec l'adresse MAC entre parenthèses.

Afin de trouver la liste des commandes autorisées, installez d-feet avec Sudo apt install d-feet. Après l'avoir exécuté, appliquez la recherche de la requête bluez sous System Bus onglet et recherchez l'entrée avec le MAC de vos appareils:

enter image description here

Il existe des méthodes similaires à celles qui utilisent des écouteurs Bluetooth sous org.bluez.MediaControl1. Mais, lorsque vous parcourez ces arbres, vous pouvez trouver A WAY more, cela mérite vraiment votre attention.

dbus-send est une commande pour envoyer des signaux à l'aide de dbus. --system switch indique que nous voulons utiliser des éléments de System Bus Onglet d-feet. Je ne l'ai pas encore essayé, mais je suppose que --print-reply est uniquement à des fins de débogage et n'est pas obligatoire. --dest=org.blez fait référence à Name dans l'en-tête d-feet. /org/bluez/hci0/dev_<mobile_bluetooth_device_mac_address_with_numbers_underscore_separated> et org.bluez.MediaControl1.<command> fait référence aux chemins de l'arborescence des objets.

10
pt12lol