Czy mogę używać mojego komputera jako odbiornika A2DP / głośnika Bluetooth?

40

Po pierwsze problem: używam odtwarzacza MP3 Cowon jako mojego głównego odtwarzacza z podstawowymi zatyczkami do uszu.

Oferuje A2DP i chciałbym, aby mój netbook (z systemem UNE 10.04) działał jako odbiornik.

Niektóre zasoby internetowe o a2dp, ale większość jest nieaktualna:

Pierre-Yves Gillier
źródło

Odpowiedzi:

47

Aby używać komputera z systemem Ubuntu jako urządzenia Bluetooth a2dp, należy go najpierw skonfigurować, aby zarejestrować się jako punkt końcowy „ujścia a2dp”.

Bluez Opakowanie Ubuntu (10,04 i powyżej) zawiera program o nazwie sdptool , który może być używany do sprawdzania, czy urządzenie Bluetooth jest skonfigurowany jako zlewu a2DP czy nie. Oto wyjście z sdptool uruchomionego na moim zestawie słuchawkowym Bluetooth (adres pochodzi z okna dialogowego „Ustawienia Bluetooth” w centrum sterowania gnome):

$ 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

$

a oto dane wyjściowe po uruchomieniu na mojej lokalnej maszynie Ubuntu:

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

To pokazuje, że maszyna Ubuntu nie reklamuje się jako zlew a2dp. Jednak reklamuje się jako źródło 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

Umożliwia to maszynie Ubuntu prawidłowe sparowanie z zestawem słuchawkowym jako źródłem dźwięku, ale nie umożliwia używania maszyny Ubuntu jako wyjścia (zlewu) dla dźwięku Bluetooth.

Jeśli edytujesz /etc/bluetooth/audio.conf, możesz włączyć obsługę ujścia a2dp, dodając ten wiersz pod [General]sekcją:

  Enable=Source

Jest to zarówno sprzeczne z intuicją - ponieważ dodajemy tutaj obsługę zlewu Bluetooth, a nie obsługę źródła - i w przeciwieństwie do komentarza w tym pliku, który twierdzi, że wszystkie zaimplementowane usługi są domyślnie włączone. :(

Po wprowadzeniu tej zmiany musisz ponownie uruchomić bluetoothd, uruchamiając sudo service bluetooth restart.

Jeśli wcześniej sparowałeś urządzenie z Androidem i komputer Ubuntu podczas próby uzyskania tej pracy, musisz usunąć parowanie po obu stronach i ponownie je sparować, aby Android mógł rozpoznać Ubuntu jako dostępne urządzenie audio.

Gdy to zrobisz, urządzenie z Androidem powinno pojawić się jako urządzenie wejściowe w PulseAudio. Jeśli PulseAudio nie wykryje nowego źródła dźwięku Bluetooth, może być konieczne zainstalowanie i załadowanie modułu Bluetooth z wiersza poleceń:

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

Następnie musisz powiedzieć PulseAudio, aby skierowało to wejście audio do wyjścia / zlewu (takiego jak głośniki lub zestaw słuchawkowy Bluetooth) za pomocą połączenia pętli zwrotnej (prosta linia od źródła do zlewu).

Późniejsze wersje PulseAudio mogą zawierać moduł-moduł Bluetooth i może już mieć skonfigurowane urządzenie pętli zwrotnej, ale nie wydaje się to najczęstszym przypadkiem.

Półautomatycznym sposobem na skonfigurowanie połączenia pętli zwrotnej - jeśli masz również zainstalowany program GUI pavucontrol - jest po prostu załadować moduł pętli zwrotnej i skonfigurować go za pomocą pavucontrol, ponieważ PulseAudio zapamięta ustawienia. Ładowanie modułu odbywa się za pomocą komendy przy użyciu pactl:

 pactl load-module module-loopback

Nie obawiaj się, jeśli jeszcze nic nie słyszysz lub otrzymujesz dziwne efekty sprzężenia zwrotnego, musimy powiedzieć nowopowstałemu urządzeniu, z którego źródła należy uzyskać sygnał wejściowy, a które zejść, aby wysłać sygnał wyjściowy jako pierwszy.

Otwórz pavucontrol i otwórz jego kartę Konfiguracja. Upewnij się, że urządzenie Bluetooth jest widoczne tutaj (po sparowaniu z nim za pomocą menedżera blueman lub innego narzędzia Bluetooth), a profil jest ustawiony na A2DP. Przejdź na kartę Urządzenia wejściowe i upewnij się, że Twoje urządzenie również się tutaj wyświetla i nie jest wyciszone. Teraz przejdź do zakładki Nagrywanie i spraw, aby nowo utworzone połączenie pętli zwrotnej używało urządzenia jako źródła z polem wyboru obok przycisku wyciszenia. Przejdź do karty Odtwarzanie, aby wybrać zlew, z którego połączenie pętli zwrotnej powinno korzystać w ten sam sposób. Jeśli urządzenie pętli zwrotnej nie wyświetla się na kartach, upewnij się, że wszystkie strumienie są wyświetlane przy użyciu pola wyboru u dołu każdej karty.

Powinieneś teraz usłyszeć dźwięk z urządzenia, jeśli jest odtwarzane, w głośnikach lub w dowolnym z wybranych odbiorników wyjściowych. Gdy urządzenie zostanie odłączone, urządzenie sprzężenia zwrotnego powróci do dostępnego zlewu i źródła, co może nie być pożądane, więc upewnij się, że wycisziłeś urządzenie sprzężenia zwrotnego, dopóki go nie potrzebujesz. Połączenie pętli zwrotnej przywróci to samo ujście / źródło przy następnym podłączeniu tego samego urządzenia Bluetooth dzięki modułowi - * - przywracającym moduły.

Jeśli to nie zadziała lub nie masz zainstalowanego pavucontrol, możesz zamiast tego ustawić pętlę zwrotną, stosując następującą metodę:

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

(Zamień $BTSOURCEna nazwę źródła dla urządzenia Bluetooth widoczną w PulseAudio, np. bluez_source.14_DA_E9_2A_D7_57I zamień $SINKna nazwę wyjścia PulseAudio, do którego chcesz wysłać strumień audio, na przykład:. alsa_output.pci-0000_00_1b.0.analog-stereoMożesz całkowicie pominąć argument sink i spowodować awarię do aktywnego zlewu i zmień go później za pomocą pavucontrol.)

  • Możesz znaleźć za $SINKpomocą pactl list sinks, jest pokazane poName:
  • Podobnie można zobaczyć za $BTSOURCEpomocąpactl list sources
  • W source_dont_movezapobiega argument połączenia sprzężenia zwrotnego z sięgnięcie do innego źródła dźwięku, gdy urządzenie Bluetooth jest przerywane. Zamiast tego jest usuwany i następnym razem będziesz musiał go skonfigurować ponownie.

Oto czym jest przykładem będzie wyglądać (Pamiętaj, aby zastąpić :ze _w adresie 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

Jeśli ładowanie modułu rezerwowego nie powiedzie się, spróbuj usunąć source_dont_move=yesargument, najpierw udostępniono go w wersji 1.0. Uważaj jednak, aby usunąć to połączenie pętli zwrotnej przed upuszczeniem tego dźwięku, lub jeśli na przykład mikrofon laptopa nie jest wyciszony, możesz otrzymać bardzo złe opinie. Aby ręcznie porzucić to połączenie zwrotne, gdy skończysz, uruchom:

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

Ponownie zamień $BTSOURCEna nazwę źródła PulseAudio, która odnosi się do twojego urządzenia Bluetooth. Możesz również zwolnić moduł, używając identyfikatora zwróconego przez polecenie 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

Bibliografia:

  • Wpis na blogu opisujący niektóre szczegóły, jak to naprawić w Ubuntu.
slangasek
źródło
czy możemy zmienić mapę kanałów dla konkretnego ujścia urządzenia
Prakash V Holkar
cześć i dziękuję za szczegółowy przewodnik. Polecenie pactl load-module module-bluethooth-discoverkończy się niepowodzeniem w Ubuntu studio 14.04. Więc nie widzę żadnych bluezźródeł pulseaudio, nawet jeśli mój telefon prawidłowo widzi komputer jako zlew audio. Jakieś pomysły?
nass
jeśli pactl list sources shortnie wyświetla dla ciebie źródła bluez, znalazłem dwa możliwe rozwiązania: zadzwoń gdbus call --system --dest org.bluez --object-path /org/bluez/XXX/hci0/dev_XX_XX_XX_XX_XX_XX --method org.bluez.AudioSource.Connectgdzie (ścieżka zawiera adres BD urządzenia i ścieżkę adaptera, którą możesz uzyskać gdbus call --system --dest org.bluez --object-path / --method org.bluez.Manager.DefaultAdapter). Lub użyj d-stóp, jak wyjaśniono tutaj . W przeciwnym razie połącz się po stronie telefonu i zacznij grać.
Treviño,
Nadal nie widzę żadnego źródła z bluez. Linux Mint 17.3 „Rosa” tutaj.
donquixote
1
Łał! przy minimalnych zmianach (/etc/bluetooth/main.conf zamiast audio.conf) działa to na Rasbian. Dziękujemy! (W tym systemie operacyjnym nie jest wymagana konfiguracja sprzężenia zwrotnego)
jamie
13

Używam bluemana, instalowanego z centrum oprogramowania Ubuntu. Kliknięcie prawym przyciskiem myszy ikony blueman * -> „lokalne usługi” -> audio-> Sprawdź, czy „zaawansowany odbiór audio” jest wskazany. Przy okazji używam go do słuchania w moim laptopie z Ubuntu 11.10 tego, co gram na telefonie z Androidem.

* Ikona bluemana jest pokazana w prawym dolnym rogu w gnome shell + ubuntu 11.10, tak jest w moim przypadku. Mam nadzieję, że jest to dla ciebie przydatne.

użytkownik47059
źródło
Interfejs konfiguracji bluemana dla audio ustawia tylko wartość Enable = Source w /etc/bluetooth/audio.conf, więc nie rozumiem, jak to umożliwi Androidowi użycie komputera jako wyjścia audio.
slangasek
ok, więc jeśli ustawię to w pliku audio.conf, a następnie usuniecie parowania z obu stron połączenia, wydaje się to wystarczające, aby Android mógł w końcu postrzegać komputer jako audio audio ...
slangasek
Próbowałem tego i nie mogłem tego rozpoznać jako zlewu audio. : - /
Jorge Castro,
blueman pracował dla mnie w 12.04 z zerowymi problemami poza tym, że skończyłem z dwiema ikonami bluetooth w moim aplecie wskaźnika.
HDave
7

W Ubuntu 12.04 jest to teraz naprawdę proste

Podłącz swoje urządzenie Bluetooth

Wyszukaj urządzenie Bluetooth i zanotuj jego numer źródłowy:

pactl list sources 

Wykonaj sprzężenie zwrotne dla urządzenia Bluetooth:

pactl load-module module-loopback source=$SOURCE_NUMBER  

Gdzie $ SOURCE_NUMBER jest liczbą, którą wcześniej zanotowałeś.

Na przykład wpisałem następujące polecenie, aby uruchomić odtwarzanie dźwięku:

$ pactl load-module module-loopback source=3  

Otóż ​​to! Rozwiązanie w górnej odpowiedzi uważam za nieco skomplikowane, więc uprościłem to w ten sposób (znacznie mniej pisania i kopiowania / wklejania). Chociaż moje rozwiązanie prawdopodobnie się zepsuje, jeśli usuniesz jakieś urządzenia audio wymienione przed urządzeniem Bluetooth przez pactl list sources.

Nie zapomnij również usunąć modułu sprzężenia zwrotnego przed odłączeniem urządzenia Bluetooth:

Zanotuj numer modułu utworzonego urządzenia sprzężenia zwrotnego:

pactl list short modules

Usuń urządzenie sprzężenia zwrotnego:

pactl unload-module $MODULE_NUMBER

Poprzednie odpowiedzi zostały napisane przed wydaniem 12.04, więc jestem pewien, że były pewne zmiany. Na przykład nie musiałem ręcznie włączać korzystania z urządzeń Bluetooth jako źródła dźwięku (było domyślnie włączone). Czasami jednak muszę przełączać profil „Media Audio” w ustawieniach Bluetooth w telefonie (Samsung Captivate z CyanogenMod 9.1.0).

Prawdopodobnie istnieje sposób na wykorzystanie dbus-monitor za pomocą skryptu powłoki, aby obserwować połączenia urządzeń Bluetooth A2DP i automatycznie ładować dla niego moduł sprzężenia zwrotnego, ale to trochę przesada.

Mamy nadzieję, że nie będziemy już musieli tego robić ręcznie w Ubuntu 12.10.

Toasty
źródło
Po załadowaniu sprzężenia zwrotnego modułu dla poszczególnych zlewów, czy możemy zmienić mapę kanałów sprzężenia zwrotnego modułu konkretnego urządzenia w lewo lub w prawo
Prakash V Holkar
3

W przypadku wersji 13.04 sparuj urządzenie źródłowe z laptopem ubuntu i po prostu działa! Bardzo fajnie było stwierdzić, że teraz było to takie proste.

użytkownik184485
źródło
2

W Ubuntu 16.04 działa to od razu po wyjęciu z pudełka.

mniess
źródło
To samo, chociaż zatrzymał go następujący (niezgłoszony) błąd, wykryty w
ThorSummoner,
0

Jeszcze łatwiejsze rozwiązanie niż odpowiedź.

Możesz po prostu iść

sudo apt-get install pulseaudio*

Następnie uruchom ponownie. Po ponownym uruchomieniu połącz się z Bluetooth i po prostu odtwarzaj muzykę z telefonu. Wszystko zostanie przesłane do komputera i odtworzone na głośnikach komputera.

I tak! nie ma za co.

Adel Abula - MageBinary
źródło
apt-getużywa wyrażeń regularnych, a nie symboli wieloznacznych. Więc nie masz pojęcia, co zostanie zainstalowane pulseaudio*(wskazówka: nie tylko pakiety zaczynają się od pulseaudi). PulseAudio jest już częścią domyślnej instalacji Ubuntu.
muru
Tak! Ale to zadziała dla wszystkich leniwych ludzi, którzy chcą, aby wszystko działało natychmiast.
Adel Abula - MageBinary