Могу ли я использовать свой компьютер в качестве приемника A2DP / динамика Bluetooth?

40

Во-первых, проблема: я использую MP3-плеер Cowon в качестве основного музыкального проигрывателя с базовыми затычками для ушей.

Он предлагает A2DP, и я хотел бы, чтобы мой нетбук (под управлением UNE 10.04) выступал в качестве приемника.

Некоторые ресурсы в Интернете о a2dp, но большинство устарели:

Пьер-Ив Гилье
источник

Ответы:

47

Чтобы использовать ваш компьютер Ubuntu в качестве устройства Bluetooth a2dp, вы должны сначала настроить его для регистрации в качестве конечной точки «приемника a2dp».

Пакет bluez в Ubuntu (10.04 и выше) включает в себя утилиту sdptool, которую можно использовать для проверки, настроено ли устройство Bluetooth в качестве приемника a2dp или нет. Вот вывод sdptool, запущенного на моей гарнитуре Bluetooth (адрес берется из диалога «Настройки Bluetooth» в 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

$

и вот вывод при запуске на моей локальной машине Ubuntu:

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

Это показывает, что машина Ubuntu не рекламирует себя как приемник a2dp. Однако он рекламирует себя как источник 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

Это позволяет устройству Ubuntu правильно сопрягаться с гарнитурой в качестве источника звука, но не позволяет использовать устройство Ubuntu в качестве выхода (приемника) для звука Bluetooth.

Если вы редактируете /etc/bluetooth/audio.conf, вы можете включить поддержку приемника a2dp, добавив эту строку под [General]разделом:

  Enable=Source

И то, и другое нелогично названо, поскольку мы добавляем здесь поддержку приемника Bluetooth, а не поддержку исходного кода, и это противоречит комментарию в этом файле, в котором утверждается, что все реализованные сервисы включены по умолчанию. :(

После внесения этого изменения вам нужно будет перезапустить bluetoothd, запустив его sudo service bluetooth restart.

Если ранее вы пытались выполнить сопряжение устройства Android и компьютера Ubuntu, пытаясь получить эту работу, вам нужно будет удалить сопряжение с обеих сторон и выполнить повторное сопряжение, чтобы Android распознал Ubuntu как доступное аудиоустройство.

После этого устройство Android должно отображаться как устройство ввода в PulseAudio. Если PulseAudio не обнаруживает новый источник звука Bluetooth, вам может потребоваться установить и загрузить модуль Bluetooth из командной строки:

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

Затем вам нужно указать PulseAudio направить этот аудиовход на ваш выход / приемник (например, на ваши динамики или гарнитуру Bluetooth) с помощью петлевого соединения (прямая линия от источника к приемнику).

В более поздних версиях PulseAudio может быть включена политика module-bluetooth, и он, возможно, уже настроил для вас устройство обратной связи, но, похоже, это не самый распространенный случай.

Полуавтоматический способ установить петлевое соединение - если у вас также установлена ​​программа pavucontrol GUI - просто загрузить петлевой модуль и настроить его с помощью pavucontrol, поскольку PulseAudio запомнит настройки. Загрузка модуля выполняется из команды с использованием pactl:

 pactl load-module module-loopback

Не бойтесь, если вы еще ничего не слышите, или если вы получаете странные эффекты обратной связи, нам нужно сообщить вновь созданному устройству, какой источник получить входной сигнал и какой приемник, чтобы отправить выход в первую очередь.

Откройте pavucontrol и откройте его вкладку Конфигурация. Убедитесь, что ваше Bluetooth-устройство отображается здесь (после сопряжения с ним с помощью blueman-manager или другого инструмента Bluetooth) и для профиля установлено значение A2DP. Перейдите на вкладку Устройства ввода и убедитесь, что ваше устройство также отображается здесь и не отключено. Теперь переключитесь на вкладку «Запись» и сделайте так, чтобы вновь созданное петлевое соединение использовало ваше устройство в качестве источника с полем выбора рядом с кнопкой отключения звука. Перейдите на вкладку «Воспроизведение», чтобы выбрать приемник, который петлевое соединение должно использовать таким же образом. Если петлевое устройство не отображается на вкладках, убедитесь, что все потоки отображаются с помощью поля выбора внизу каждой вкладки.

Теперь вы должны услышать звук с вашего устройства, если оно воспроизводится, в ваших динамиках или в любом другом выходном приемнике, который вы выбрали. Когда ваше устройство отключено, устройство обратной петли переключится на доступный приемник и источник, что может быть нежелательно, поэтому убедитесь, что вы отключаете устройство обратной связи, пока оно вам не понадобится. Шлейфовое соединение восстановит тот же приемник / источник при следующем подключении того же устройства Bluetooth благодаря модулям * восстановления модулей.

Если это не сработает или у вас не установлен pavucontrol, вы можете вместо этого настроить обратную петлю, используя следующий метод:

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

(Замените $BTSOURCEна имя источника для вашего устройства Bluetooth, как видно на PulseAudio, например bluez_source.14_DA_E9_2A_D7_57; и замените $SINKна имя выхода PulseAudio, на который вы хотите отправить аудиопоток, например:. alsa_output.pci-0000_00_1b.0.analog-stereoВы можете полностью исключить аргумент приемника и сделать его запасным. к активному стоку, и измените его позже через pavucontrol.)

  • Вы можете найти $SINKс pactl list sinks, это показано послеName:
  • Точно так же вы можете увидеть $BTSOURCEсpactl list sources
  • В source_dont_moveаргументе предотвращает соединительный шлейф от падения назад к другому источнику звука , когда устройство Bluetooth отключено. Вместо этого он удаляется, и вам придется настроить его снова в следующий раз.

Вот что пример один будет выглядеть ( Не забудьте заменить :с _в адрес 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

Если загрузка резервного модуля не удалась, попробуйте удалить source_dont_move=yesаргумент, он был впервые доступен в версии 1.0. Однако будьте осторожны, чтобы удалить это петлевое соединение перед тем, как отключить звук, или, например, если микрофон вашего ноутбука выключен, вы можете получить очень плохую обратную связь. Чтобы завершить это петлевое соединение вручную, когда закончите, запустите:

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

Снова замените $BTSOURCEимя источника PulseAudio, которое относится к вашему устройству Bluetooth. Вы также можете выгрузить модуль, используя идентификатор, возвращаемый командой 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

Ссылки:

slangasek
источник
мы можем изменить карту канала для конкретного приемника устройства
Prakash V Holkar
Привет всем и спасибо за подробное руководство. pactl load-module module-bluethooth-discoverСбой команды в Ubuntu Studio 14.04. Таким образом, я не вижу никаких bluezисточников pulseaudio, хотя мой телефон правильно видит компьютер как приемник звука. Любые идеи?
nass
если для pactl list sources shortвас не отображается источник bluez, я нашел два возможных решения: 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 (путь включает BD-адрес устройства и путь к адаптеру, по которому вы можете получить gdbus call --system --dest org.bluez --object-path / --method org.bluez.Manager.DefaultAdapter). Или используйте d-foot, как описано здесь . В противном случае подключитесь на стороне телефона и начните играть.
Тревиньо
Я до сих пор не вижу ни одного источника из bluez. Linux Mint 17.3 "Роза" здесь.
Донкиксот
1
Вот Это Да! с минимальными изменениями (/etc/bluetooth/main.conf вместо audio.conf) это работает на Rasbian. Спасибо! (В этой ОС настройка петли не требуется)
jamie
13

Я использую blueman, установленный из программного центра Ubuntu. Щелкнув правой кнопкой мыши на значке blueman * -> «местные службы» -> аудио-> проверить, что «расширенный прием звука» не за горами. Кстати, я использую его, чтобы слушать в своем ноутбуке Ubuntu 11.10 то, что я играю на своем телефоне Android.

* Значок blueman показан в правом нижнем углу в gnome shell + ubuntu 11.10, это мой случай. Я надеюсь, что это полезно для вас.

user47059
источник
Интерфейс конфигурации blueman для аудио устанавливает только значение Enable = Source в /etc/bluetooth/audio.conf, поэтому я не вижу, как это позволило бы Android использовать компьютер в качестве аудиовыхода.
Slangasek
ОК, так что если я установил , что в audio.conf , а затем отменить сопряжение с обеих сторон соединения, которые , как представляется, достаточно , чтобы позволить Android увидеть компьютер как аудио раковине после всего ...
slangasek
Я попробовал это и не смог распознать его как аудио-приемник. : - /
Хорхе Кастро
blueman работал на меня в 12.04 с нулевыми проблемами, за исключением того факта, что я получил две иконки bluetooth в апплете индикатора.
HDave
7

Это действительно просто сейчас в Ubuntu 12.04

Подключите ваше устройство Bluetooth

Найдите устройство Bluetooth и запомните его номер источника:

pactl list sources 

Сделайте петлю для устройства Bluetooth:

pactl load-module module-loopback source=$SOURCE_NUMBER  

Где $ SOURCE_NUMBER - номер, который вы ранее приняли к сведению.

Например, я ввел следующее, чтобы воспроизведение звука работало:

$ pactl load-module module-loopback source=3  

Это оно! Я нашел решение в верхнем ответе немного сложным, поэтому я упростил его таким образом (гораздо меньше печатать и копировать / вставлять). Хотя мое решение, вероятно, сломается, если вы удалите любые аудиоустройства, перечисленные до устройства Bluetooth pactl list sources.

Кроме того, не забудьте удалить петлевой модуль перед отключением устройства Bluetooth:

Запомните номер модуля петлевого устройства, которое вы создали:

pactl list short modules

Удалить петлевое устройство:

pactl unload-module $MODULE_NUMBER

Предыдущие ответы были написаны до релиза 12.04, поэтому я уверен, что произошли некоторые изменения. Например, мне не нужно было вручную включать использование устройств Bluetooth в качестве источника звука (это было включено по умолчанию). Однако иногда мне приходится переключать профиль «Media Audio» в настройках Bluetooth на телефоне (Samsung Captivate работает под управлением CyanogenMod 9.1.0).

Вероятно, есть способ использовать dbus-monitor с помощью сценария оболочки для отслеживания подключений устройств Bluetooth A2DP и ​​автоматической загрузки для него модуля обратной связи, но это немного над моей головой.

Надеюсь, нам больше не придется делать это вручную в Ubuntu 12.10.

подрумяненный
источник
После загрузки обратной связи модуля для определенных приемников, можем ли мы изменить карту каналов обратной связи модуля конкретного устройства влево или вправо
Prakash V Holkar
3

На 13.04 подключите ваше исходное устройство к ноутбуку с Ubuntu, и оно просто работает! Очень здорово обнаружить, что теперь это было так просто.

user184485
источник
2

В Ubuntu 16.04 это работает "из коробки".

mniess
источник
То же самое, хотя следующая (незарегистрированная) ошибка остановила ее, обнаруженную в системном журнале: askubuntu.com/questions/689281/…
ThorSummoner
0

Даже более простое решение, чем ответ.

Вы можете просто пойти

sudo apt-get install pulseaudio*

Затем перезагрузите компьютер. После перезагрузки подключитесь к Bluetooth и просто воспроизведите музыку на своем телефоне. Все будет передаваться на ваш компьютер и воспроизводиться на динамиках компьютера.

И да! пожалуйста.

Адель Абула - MageBinary
источник
apt-getиспользует регулярные выражения, а не подстановочные знаки. Таким образом, вы понятия не имеете, что будет установлено с использованием pulseaudio*(подсказка: это не просто пакеты, которые начинаются с pulseaudi). И PulseAudio уже является частью стандартной установки Ubuntu.
Муру
Да! Но это будет работать для всех ленивых людей, которые хотят, чтобы все заработало мгновенно.
Адель Абула - MageBinary