Puis-je utiliser mon ordinateur comme récepteur A2DP / haut-parleur Bluetooth?

40

Tout d’abord, le problème: j’utilise un lecteur MP3 Cowon comme lecteur de musique principal avec des bouchons d'oreille de base.

Il propose A2DP et j'aimerais que mon netbook (fonctionnant sous la norme UNE 10.04) agisse en tant que récepteur.

Quelques ressources sur le Web à propos de a2dp, mais la plupart sont obsolètes:

Pierre-Yves Gillier
la source

Réponses:

47

Pour utiliser votre ordinateur Ubuntu en tant que périphérique Bluetooth a2dp, vous devez d’abord le configurer pour s’enregistrer en tant que point de terminaison "récepteur a2dp".

Le paquet bluez dans Ubuntu (10.04 et supérieur) inclut un utilitaire appelé sdptool qui peut être utilisé pour vérifier si un périphérique Bluetooth est configuré en tant que récepteur a2dp ou non. Voici la sortie de sdptool exécutée avec mon casque Bluetooth (l'adresse provient de la boîte de dialogue "Paramètres Bluetooth" du gnome-control-center):

$ sdptool search --bdaddr 00:18:16:3A:3B:D4 a2snk
Searching for a2snk on 00:18:16:3A:3B:D4 ...
Service RecHandle: 0x10002
Service Class ID List:
  "Audio Sink" (0x110b)
Protocol Descriptor List:
  "L2CAP" (0x0100)
    PSM: 25
  "AVDTP" (0x0019)
    uint16: 0x102
Profile Descriptor List:
  "Advanced Audio" (0x110d)
    Version: 0x0102

$

et voici la sortie lorsqu’elle est exécutée sur ma machine Ubuntu locale:

$ sdptool search --bdaddr local a2snk
Searching for a2snk on FF:FF:FF:00:00:00 ...
$

Cela montre que la machine Ubuntu ne se présente pas comme un évier a2dp. Cependant, il se présente comme une source A2DP:

$ sdptool search --bdaddr local a2src
Searching for a2src on FF:FF:FF:00:00:00 ...
Service Name: Audio Source
Service RecHandle: 0x10003
Service Class ID List:
  "Audio Source" (0x110a)
Protocol Descriptor List:
  "L2CAP" (0x0100)
    PSM: 25
  "AVDTP" (0x0019)
    uint16: 0x102
Profile Descriptor List:
  "Advanced Audio" (0x110d)
    Version: 0x0102

Cela permet à la machine Ubuntu d’apparier correctement avec le casque en tant que source audio, mais ne permet pas d’utiliser la machine Ubuntu comme sortie (puits) pour l’audio Bluetooth.

Si vous modifiez /etc/bluetooth/audio.conf, vous pouvez activer la prise en charge du récepteur a2dp en ajoutant cette ligne sous la [General]section:

  Enable=Source

Ceci est à la fois contre-intuitivement nommé - puisque ce que nous ajoutons ici est la prise en charge des récepteurs Bluetooth, et non des sources - et en contradiction avec le commentaire de ce fichier qui prétend que tous les services mis en œuvre sont activés par défaut. :(

Après avoir apporté cette modification, vous devrez redémarrer Bluetooth en exécutant sudo service bluetooth restart.

Si vous avez déjà couplé votre appareil Android et votre ordinateur Ubuntu en essayant d'obtenir ce travail, vous devrez supprimer le couplage des deux côtés et les rapprocher afin qu'Android reconnaisse Ubuntu comme périphérique audio disponible.

Une fois que cela est fait, le périphérique Android doit apparaître comme un périphérique d'entrée sous PulseAudio. Si PulseAudio ne détecte pas la nouvelle source audio Bluetooth, vous devrez peut-être installer et charger le module Bluetooth à partir de la ligne de commande:

 sudo apt-get install pulseaudio-module-bluetooth
 pactl load-module module-bluetooth-discover

Ensuite, vous devez indiquer à PulseAudio d’acheminer cette entrée audio vers votre sortie (par exemple vos haut-parleurs ou un casque Bluetooth) à l’aide d’une connexion en boucle (une ligne droite reliant une source à un récepteur).

Des versions ultérieures de PulseAudio peuvent inclure une politique de module bluetooth et déjà configuré un périphérique de bouclage, mais cela ne semble pas être le cas le plus courant.

Un moyen semi-automatique de configurer la connexion en boucle (si vous avez également installé le programme d'interface graphique pavucontrol) consiste à simplement charger le module de bouclage et à le configurer à l'aide de pavucontrol, étant donné que PulseAudio gardera les paramètres en mémoire. Le chargement du module se fait depuis la commande en utilisant pactl:

 pactl load-module module-loopback

Ne craignez rien si vous n'entendez rien encore ou si vous obtenez des effets de retour étranges, nous devons indiquer au périphérique nouvellement créé la source à partir de laquelle entrer et le récepteur auquel envoyer la sortie en premier.

Ouvrez pavucontrol et ouvrez son onglet Configuration. Assurez-vous que votre périphérique Bluetooth apparaît ici (après l'avoir couplé à l'aide de blueman-manager ou d'un autre outil Bluetooth) et que le profil est défini sur A2DP. Basculez sur l'onglet Périphériques d'entrée et assurez-vous que votre périphérique s'affiche également ici et qu'il n'est pas mis en sourdine. Passez maintenant à l'onglet Enregistrement et faites en sorte que la connexion de bouclage nouvellement créée utilise votre appareil en tant que source avec la zone de sélection en regard du bouton Muet. Basculez sur l'onglet Lecture pour sélectionner l'évier que la connexion en boucle doit utiliser de la même manière. Si le périphérique de bouclage ne s'affiche pas dans les onglets, assurez-vous que tous les flux sont affichés à l'aide de la zone de sélection située au bas de chaque onglet.

Vous devriez maintenant entendre le son de votre appareil, s'il est en cours de lecture, dans vos haut-parleurs ou dans le récepteur de sortie que vous avez sélectionné. Lorsque votre périphérique est déconnecté, le périphérique en boucle retourne à un récepteur et à une source disponibles, ce qui peut ne pas être souhaitable. Veillez donc à désactiver le périphérique en boucle jusqu'à ce que vous en ayez besoin. La connexion en boucle restaure le même récepteur / source lors de la prochaine connexion du même périphérique Bluetooth grâce au module - * - modules de restauration.

Si cela ne fonctionne pas ou si vous n'avez pas installé pavucontrol, vous pouvez plutôt configurer le bouclage à l'aide de la méthode suivante:

 pactl load-module module-loopback source_dont_move=yes source=$BTSOURCE sink=$SINK

(Remplacez-le $BTSOURCEpar le nom source de votre périphérique Bluetooth tel que vu par PulseAudio, par exemple bluez_source.14_DA_E9_2A_D7_57; et remplacez $SINKpar le nom de la sortie PulseAudio à laquelle vous voulez envoyer le flux audio, par exemple alsa_output.pci-0000_00_1b.0.analog-stereo:. dans un évier actif et changez-le plus tard via pavucontrol.)

  • Vous pouvez trouver $SINKavec pactl list sinks, c'est montré aprèsName:
  • De même, vous pouvez voir le $BTSOURCEavecpactl list sources
  • L' source_dont_moveargument empêche la connexion en boucle de revenir à une autre source audio lorsque le périphérique Bluetooth est déconnecté. Au lieu de cela, il est supprimé et vous devrez le configurer à nouveau la prochaine fois.

Voici à quoi un exemple ressemblerait (souvenez-vous de remplacer le :avec _par l'adresse Bluetooth!):

pactl load-module module-loopback source_dont_move=yes source=bluez_source.14_DA_E9_2A_D7_57 sink=alsa_output.pci-0000_00_14.2.analog-stereo

Si le chargement du module de secours échoue, essayez de supprimer l' source_dont_move=yesargument, celui-ci a été rendu disponible dans la version 1.0. Veillez toutefois à supprimer cette connexion en boucle avant de supprimer cet audio, ou si, par exemple, le microphone de votre ordinateur portable n’est pas mis en sourdine, vous risquez d’obtenir des informations très mauvaises. Pour supprimer manuellement cette connexion en boucle lorsque vous avez terminé, exécutez:

pactl unload-module $(pactl list short modules | grep "loopback.*$BTSOURCE" | cut -f1)

Encore une fois, remplacez-le $BTSOURCEpar le nom de la source PulseAudio qui fait référence à votre périphérique Bluetooth. Vous pouvez également décharger le module à l'aide de l'ID renvoyé par la commande load-module:

$ pactl load-module module-loopback source_dont_move=yes source=bluez_source.14_DA_E9_2A_D7_57 sink=alsa_output.pci-0000_00_14.2.analog-stereo
15
$ pactl unload-module 15

Les références:

  • Article de blog décrivant certains des détails de la résolution de ce problème dans Ubuntu.
Slangasek
la source
peut - on modifie la carte de canal pour évier de dispositif particulier
Prakash V Holkar
Bonjour et merci pour le guide détaillé. La commande pactl load-module module-bluethooth-discoveréchoue dans Ubuntu Studio 14.04. Donc, je ne vois aucune bluezsource pulseaudio, même si mon téléphone considère correctement le PC comme un récepteur audio. Des idées?
de
Si pactl list sources shortne vous indique pas la source bluez, j'ai trouvé deux solutions possibles: appel gdbus call --system --dest org.bluez --object-path /org/bluez/XXX/hci0/dev_XX_XX_XX_XX_XX_XX --method org.bluez.AudioSource.Connectoù (le chemin contient l'adresse du périphérique BD et le chemin de l'adaptateur avec lequel vous pouvez obtenir gdbus call --system --dest org.bluez --object-path / --method org.bluez.Manager.DefaultAdapter). Ou utilisez d-pieds comme expliqué ici . Sinon, connectez-vous du côté du téléphone et commencez à jouer quelque chose.
Treviño
Je ne vois toujours aucune source de bluez apparaître. Linux Mint 17.3 "Rosa" ici.
Donquixote
1
Hou la la! avec des modifications minimes (/etc/bluetooth/main.conf au lieu de audio.conf), cela fonctionne sur Rasbian. Merci (aucune configuration de bouclage n'est nécessaire dans cet OS)
jamie
13

J'utilise blueman, installé à partir du centre logiciel Ubuntu. Un clic droit sur l'icône blueman * -> "services locaux" -> audio-> Vérifier "réception audio avancée" est basculé. Btw je l'utilise pour écouter dans mon ordinateur portable Ubuntu 11.10 ce que je joue sur mon téléphone Android.

* L'icône blueman apparaît dans le coin inférieur droit de gnome shell + Ubuntu 11.10, c'est mon cas. J'espère que cela vous sera utile.

utilisateur47059
la source
L'interface de configuration de blueman pour l'audio ne définit que la valeur Enable = Source dans /etc/bluetooth/audio.conf, je ne vois donc pas comment cela permettrait à Android d'utiliser un ordinateur comme sortie audio.
Slangasek
ok, donc si je règle cela dans audio.conf puis que je dissocie les deux côtés de la connexion, cela semble suffisant pour permettre à Android de voir l'ordinateur comme un puits audio après tout ...
slangasek
J'ai essayé cela et je ne pouvais pas le faire reconnaître comme un puits audio. : - /
Jorge Castro
blueman a travaillé pour moi en 12.04 avec zéro problème autre que le fait que je me suis retrouvé avec deux icônes Bluetooth dans mon applet indicateur.
HDave
7

C'est vraiment simple maintenant dans Ubuntu 12.04

Connectez votre appareil Bluetooth

Recherchez votre appareil Bluetooth et notez son numéro de source:

pactl list sources 

Faites une boucle pour le périphérique Bluetooth:

pactl load-module module-loopback source=$SOURCE_NUMBER  

Où $ SOURCE_NUMBER est le numéro que vous avez noté précédemment.

Par exemple, j'ai entré ce qui suit pour que la lecture audio fonctionne:

$ pactl load-module module-loopback source=3  

C'est ça! J'ai trouvé la solution dans la réponse du haut un peu compliquée, je l'ai donc simplifiée (beaucoup moins de dactylographie et de copier / coller). Bien que ma solution ne fonctionne probablement pas si vous supprimez les périphériques audio répertoriés avant le périphérique Bluetooth par pactl list sources.

N'oubliez pas non plus de retirer le module de bouclage avant de déconnecter le périphérique Bluetooth:

Notez le numéro de module du périphérique de bouclage que vous avez créé:

pactl list short modules

Supprimez le périphérique de bouclage:

pactl unload-module $MODULE_NUMBER

Les réponses précédentes étaient écrites avant la publication de 12.04, alors je suis sûr qu'il y a eu des changements. Par exemple, je n'ai pas eu à activer manuellement l'utilisation de périphériques Bluetooth comme source audio (cette option était activée par défaut). Cependant, je dois parfois basculer le profil "Media Audio" dans les paramètres Bluetooth sur mon téléphone (Samsung Captivate exécutant CyanogenMod 9.1.0).

Il existe probablement un moyen de tirer parti de dbus-monitor en utilisant un script shell pour surveiller les connexions de périphérique Bluetooth A2DP et charger automatiquement un module de bouclage pour celui-ci, mais cela me dépasse un peu.

Espérons que nous n’aurons plus besoin de le faire manuellement dans Ubuntu 12.10.

Grillé
la source
Après avoir chargé le module de bouclage pour des puits particuliers, pouvons-nous changer la carte des canaux du module de bouclage de périphérique particulier vers la gauche ou la droite
Prakash V Holkar le
3

Pour la version 13.04, associez votre périphérique source avec l’ordinateur portable Ubuntu et tout fonctionne! Très cool de constater que c'était aussi simple que cela maintenant.

utilisateur184485
la source
0

Solution encore plus facile que la réponse.

Vous pouvez simplement aller

sudo apt-get install pulseaudio*

Puis redémarrez. Après le redémarrage, connectez-vous à Bluetooth et écoutez simplement la musique sur votre téléphone. Tout sera transmis à votre ordinateur et diffusé sur les haut-parleurs de l'ordinateur.

Et oui! vous êtes les bienvenus.

Adel Abula - MageBinary
la source
apt-getutilise des expressions régulières, pas des caractères génériques. Donc, vous n'avez aucune idée de ce qui sera installé avec pulseaudio*(indice: ce ne sont pas que les paquets qui commencent par pulseaudi). Et PulseAudio fait déjà partie de l’installation par défaut d’Ubuntu.
muru
Oui! Mais cela fonctionnera pour tous les paresseux qui veulent que les choses fonctionnent instantanément.
Adel Abula - MageBinary