Kann ich meinen Computer als A2DP-Empfänger / Bluetooth-Lautsprecher verwenden?

40

Zunächst das Problem: Ich verwende einen Cowon MP3-Player als Hauptmusikplayer mit einfachen Ohrstöpseln.

Es bietet A2DP und ich möchte, dass mein Netbook (mit UNE 10.04) als Empfänger fungiert.

Einige Ressourcen im Web über a2dp, aber die meisten sind veraltet:

Pierre-Yves Gillier
quelle

Antworten:

47

Um Ihren Ubuntu-Rechner als a2dp-Bluetooth-Gerät zu verwenden, müssen Sie ihn zunächst so konfigurieren, dass er sich als "a2dp sink" -Endpunkt registriert.

Das Paket bluez in Ubuntu (10.04 und höher) enthält ein Dienstprogramm namens sdptool , mit dem überprüft werden kann, ob ein Bluetooth-Gerät als a2dp-Senke konfiguriert ist oder nicht. Hier ist die Ausgabe von sdptool, die mit meinem Bluetooth-Headset ausgeführt wird (die Adresse stammt aus dem Dialogfeld "Bluetooth-Einstellungen" im 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

$

und hier ist die Ausgabe, wenn sie auf meinem lokalen Ubuntu-Rechner ausgeführt wird:

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

Dies zeigt, dass der Ubuntu-Rechner sich nicht als a2dp-Senke bewirbt. Es wirbt jedoch selbst als a2dp-Quelle:

$ 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

Auf diese Weise kann das Ubuntu-Gerät ordnungsgemäß mit dem Headset als Audioquelle gekoppelt werden. Die Verwendung des Ubuntu-Geräts als Ausgabe (Senke) für Bluetooth-Audio ist jedoch nicht möglich.

Wenn Sie /etc/bluetooth/audio.confÄnderungen vornehmen, können Sie die Unterstützung von a2dp sink aktivieren, indem Sie diese Zeile unterhalb des [General]Abschnitts einfügen :

  Enable=Source

Dies wird beide falsch benannt - da wir hier die Unterstützung für Bluetooth-Senken und nicht die Unterstützung für Quellen hinzufügen - und widerspricht dem Kommentar in dieser Datei, der besagt, dass alle implementierten Dienste standardmäßig aktiviert sind. :(

Nachdem Sie diese Änderung vorgenommen haben, müssen Sie bluetoothd durch Ausführen neu starten sudo service bluetooth restart.

Wenn Sie Ihr Android-Gerät und Ihren Ubuntu-Computer zuvor gekoppelt haben, während Sie diese Funktion nutzen, müssen Sie die Kopplung auf beiden Seiten löschen und erneut koppeln, damit Android Ubuntu als verfügbares Audiogerät erkennt.

Sobald Sie dies getan haben, sollte das Android-Gerät unter PulseAudio als Eingabegerät angezeigt werden. Wenn PulseAudio die neue Bluetooth-Audioquelle nicht erkennt, müssen Sie möglicherweise das Bluetooth-Modul über die Befehlszeile installieren und laden:

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

Dann müssen Sie PulseAudio anweisen, diesen Audioeingang über eine Loopback-Verbindung (eine gerade Linie von einer Quelle zu einer Senke) zu Ihrem Ausgang / Ihrer Senke (wie Ihren Lautsprechern oder einem Bluetooth-Headset) zu leiten.

In späteren Versionen von PulseAudio ist möglicherweise eine Modul-Bluetooth-Richtlinie enthalten, und es wurde möglicherweise bereits ein Loopback-Gerät für Sie eingerichtet. Dies scheint jedoch nicht der häufigste Fall zu sein.

Eine halbautomatische Methode zum Einrichten der Loopback-Verbindung - wenn Sie auch das GUI-Programm pavucontrol installiert haben - besteht darin, das Loopback-Modul zu laden und mit pavucontrol zu konfigurieren, da PulseAudio die Einstellungen speichert. Das Laden des Moduls erfolgt über den Befehl mit pactl:

 pactl load-module module-loopback

Keine Angst, wenn Sie noch nichts hören oder merkwürdige Rückkopplungseffekte erhalten, müssen Sie dem neu erstellten Gerät mitteilen, von welcher Quelle die Eingabe stammt und von welcher Senke die Ausgabe zuerst gesendet werden soll.

Öffnen Sie pavucontrol und öffnen Sie die Registerkarte Konfiguration. Stellen Sie sicher, dass Ihr Bluetooth-Gerät hier angezeigt wird (nachdem Sie es mit blueman-manager oder einem anderen Bluetooth-Tool gekoppelt haben) und das Profil auf A2DP eingestellt ist. Wechseln Sie zur Registerkarte Eingabegeräte und stellen Sie sicher, dass Ihr Gerät auch hier angezeigt wird und nicht stummgeschaltet ist. Wechseln Sie nun zur Registerkarte Aufnahme, und stellen Sie sicher, dass die neu erstellte Loopback-Verbindung Ihr Gerät als Quelle verwendet. Aktivieren Sie dazu das Kontrollkästchen neben der Schaltfläche zum Stummschalten. Wechseln Sie zur Registerkarte Wiedergabe, um die Senke auszuwählen, die die Loopback-Verbindung auf dieselbe Weise verwenden soll. Wenn das Loopback-Gerät nicht in den Registerkarten angezeigt wird, stellen Sie sicher, dass alle Streams mithilfe des Auswahlfelds am unteren Rand jeder Registerkarte angezeigt werden.

Sie sollten jetzt das Audio von Ihrem Gerät, wenn es abgespielt wird, über Ihre Lautsprecher oder über die von Ihnen ausgewählte Ausgabesenke hören. Wenn Ihr Gerät nicht angeschlossen ist, greift das Loopback-Gerät auf eine verfügbare Senke und Quelle zurück, was möglicherweise nicht wünschenswert ist. Stellen Sie daher sicher, dass Sie das Loopback-Gerät stumm schalten, bis Sie es benötigen. Die Loopback-Verbindung stellt die gleiche Senke / Quelle wieder her, wenn das gleiche Bluetooth-Gerät das nächste Mal verbunden wird, dank des Moduls - * - Module wiederherstellen.

Wenn dies nicht funktioniert oder Sie pavucontrol nicht installiert haben, können Sie den Loopback stattdessen wie folgt einrichten:

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

(Ersetzen $BTSOURCEmit dem Quellnamen für das Bluetooth - Gerät , wie durch Pulseaudio zu sehen, zum Beispiel bluez_source.14_DA_E9_2A_D7_57, und ersetzen $SINKmit dem Namen der Pulseaudio Ausgabe , die Sie wollen , um den Audio - Stream senden, zum Beispiel: alsa_output.pci-0000_00_1b.0.analog-stereoSie können ganz das Waschbecken Argument auslassen und haben es Rückfall. auf ein aktives Waschbecken und ändern Sie es später über pavucontrol.)

  • Sie können finden $SINKmit pactl list sinks, es wird nach einerName:
  • Ebenso sieht man das $BTSOURCEmitpactl list sources
  • Das source_dont_moveArgument verhindert, dass die Loopback-Verbindung zu einer anderen Audioquelle zurückfällt, wenn das Bluetooth-Gerät getrennt wird. Es wird stattdessen entfernt und muss beim nächsten Mal erneut eingerichtet werden.

Hier ist , was ein Beispiel einer aussehen würde (Denken Sie daran , das zu ersetzen , :mit _der Bluetooth - Adresse!):

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

Wenn das Laden des Fallback-Moduls fehlschlägt, entfernen Sie das source_dont_move=yesArgument, das zuerst in Version 1.0 verfügbar gemacht wurde. Achten Sie jedoch darauf, diese Loopback-Verbindung zu entfernen, bevor Sie das Audio beenden. Wenn beispielsweise das Mikrofon Ihres Laptops nicht stummgeschaltet ist, erhalten Sie möglicherweise ein sehr schlechtes Feedback. Führen Sie Folgendes aus, um diese Loopback-Verbindung manuell zu beenden, wenn Sie fertig sind:

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

Ersetzen Sie erneut $BTSOURCEden Namen für die PulseAudio-Quelle, die sich auf Ihr Bluetooth-Gerät bezieht. Sie können das Modul auch mit der vom Befehl load-module zurückgegebenen ID entladen:

$ 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

Verweise:

  • Blog-Beitrag , der einige Details zur Behebung dieses Problems in Ubuntu enthält.
Slangasek
quelle
Können wir die Kanalzuordnung für bestimmte Geräte Senke ändern
Prakash V Holkar
hi theree und danke für die ausführliche anleitung. Der Befehl pactl load-module module-bluethooth-discoverschlägt in Ubuntu Studio 14.04 fehl. Ich sehe also keine bluezQuellen in pulseaudio, obwohl mein Telefon den PC korrekt als Audiosenke ansieht. Irgendwelche Ideen?
nass
Wenn pactl list sources shortdie bluez-Quelle für Sie nicht angezeigt wird, habe ich zwei mögliche Lösungen gefunden: call gdbus call --system --dest org.bluez --object-path /org/bluez/XXX/hci0/dev_XX_XX_XX_XX_XX_XX --method org.bluez.AudioSource.Connectwhere (der Pfad enthält die BD-Adresse des Geräts und den Adapterpfad, den Sie verwenden können gdbus call --system --dest org.bluez --object-path / --method org.bluez.Manager.DefaultAdapter). Oder benutze d-feet wie hier erklärt . Andernfalls stellen Sie eine Telefonverbindung her und spielen Sie etwas.
Treviño
Ich sehe immer noch keine Quelle von bluez. Linux Mint 17.3 "Rosa" hier.
donquixote
1
Beeindruckend! Mit minimalen Änderungen (/etc/bluetooth/main.conf anstelle von audio.conf) funktioniert dies auf Rasbian. Vielen Dank! (In diesem Betriebssystem ist keine Loopback-Konfiguration erforderlich)
Jamie
13

Ich verwende blueman, installiert vom Ubuntu Software Center. Klicken Sie mit der rechten Maustaste auf das Blueman-Symbol * -> "Lokale Dienste" -> Audio -> Aktivieren Sie das Kontrollkästchen "Erweiterter Audioempfang". Übrigens verwende ich es, um in meinem Ubuntu 11.10-Laptop zu hören, was ich auf meinem Android-Handy spiele.

* Das Blueman-Symbol wird in der rechten unteren Ecke von Gnome Shell + Ubuntu 11.10 angezeigt, das ist mein Fall. Ich hoffe, das ist irgendwie nützlich für Sie.

user47059
quelle
Die blueman-Konfigurationsoberfläche für Audio legt nur den Wert Enable = Source in /etc/bluetooth/audio.conf fest, sodass ich nicht verstehe, wie dies android ermöglichen würde, einen Computer als Audioausgabe zu verwenden.
Slangasek
ok, also wenn ich das in audio.conf einstelle und dann von beiden Seiten der Verbindung die Paarung aufhebe , scheint das genug zu sein, damit Android den Computer immerhin als Audio-Senke
ansieht
Ich habe es versucht und konnte es nicht dazu bringen, es als Audiosenke zu erkennen. : - /
Jorge Castro
blueman arbeitete für mich im 12.04 mit null anderen Problemen als der Tatsache, dass ich zwei Bluetooth-Symbole in meinem Indikator-Applet hatte.
HDave
7

In Ubuntu 12.04 ist es jetzt wirklich einfach

Verbinden Sie Ihr Bluetooth-Gerät

Suchen Sie nach Ihrem Bluetooth-Gerät und notieren Sie sich die Quellennummer:

pactl list sources 

Erstellen Sie einen Loopback für das Bluetooth-Gerät:

pactl load-module module-loopback source=$SOURCE_NUMBER  

Dabei ist $ SOURCE_NUMBER die Nummer, die Sie zuvor notiert haben.

Ich habe beispielsweise Folgendes eingegeben, damit die Audiowiedergabe funktioniert:

$ pactl load-module module-loopback source=3  

Das ist es! Ich fand die Lösung in der oberen Antwort etwas kompliziert und vereinfachte sie auf diese Weise (viel weniger Tippen und Kopieren / Einfügen). Obwohl meine Lösung wahrscheinlich kaputt geht, wenn Sie alle vor dem Bluetooth-Gerät aufgelisteten Audiogeräte von entfernen pactl list sources.

Vergessen Sie auch nicht, das Loopback-Modul zu entfernen, bevor Sie das Bluetooth-Gerät trennen:

Notieren Sie sich die Modulnummer des von Ihnen erstellten Loopback-Geräts:

pactl list short modules

Entfernen Sie das Loopback-Gerät:

pactl unload-module $MODULE_NUMBER

Die vorherigen Antworten wurden vor der Veröffentlichung von 12.04 verfasst. Ich bin mir also sicher, dass sich einige Änderungen ergeben haben. Zum Beispiel musste ich die Verwendung von Bluetooth-Geräten als Audioquelle nicht manuell aktivieren (standardmäßig aktiviert). Manchmal muss ich jedoch das "Media Audio" -Profil in meinen Bluetooth-Einstellungen auf meinem Telefon umschalten (Samsung Captivate mit CyanogenMod 9.1.0).

Es gibt wahrscheinlich eine Möglichkeit, dbus-monitor mithilfe eines Shell-Skripts zu nutzen, um nach Bluetooth A2DP-Geräteverbindungen zu suchen und automatisch ein Loopback-Modul dafür zu laden, aber das geht mir ein bisschen über den Kopf.

Hoffentlich müssen wir dies in Ubuntu 12.10 nicht mehr manuell tun.

Toasty
quelle
Nachdem Sie das Modul-Loopback für bestimmte Senken geladen haben, können Sie die Kanalzuordnung des Modul-Loopbacks für bestimmte Geräte nach links oder rechts ändern
Prakash V Holkar,
3

Koppeln Sie für 13.04 Ihr Quellgerät mit dem Ubuntu-Laptop und es funktioniert einfach! Sehr cool zu finden, dass es jetzt so einfach war.

user184485
quelle
2

In Ubuntu 16.04 funktioniert dies sofort.

Frau
quelle
Das Gleiche gilt, obwohl der folgende (nicht gemeldete) Fehler im Systemjournal
festgestellt wurde
0

Noch einfachere Lösung als die Antwort.

Sie können einfach gehen

sudo apt-get install pulseaudio*

Starten Sie dann neu. Stellen Sie nach dem Neustart eine Verbindung zu Ihrem Bluetooth her und spielen Sie einfach die Musik auf Ihrem Telefon ab. Alles wird auf Ihren Computer übertragen und über die Lautsprecher des Computers wiedergegeben.

Und ja! Bitte.

Adel Abula - MageBinary
quelle
apt-getverwendet reguläre Ausdrücke, keine Platzhalter. Sie haben also keine Ahnung, was mit installiert wird pulseaudio*(Hinweis: Es sind nicht nur Pakete, die mit beginnen pulseaudi). Und PulseAudio ist bereits Teil der Ubuntu-Standardinstallation.
Muru
Ja! Aber das funktioniert für alle faulen Leute, die Dinge sofort zum Laufen bringen wollen.
Adel Abula - MageBinary