我可以将计算机用作A2DP接收器/蓝牙扬声器吗?


40

首先,问题是:我正在使用Cowon MP3播放器作为带有基本耳塞的主要音乐播放器。

它提供A2DP,我想让我的上网本(运行UNE 10.04)充当接收器。

网路上有一些有关a2dp的资源,但大多数资源已过时:

Answers:


47

要将Ubuntu计算机用作a2dp蓝牙设备,必须首先将其配置为注册为“ a2dp接收器”端点。

Ubuntu(10.04及更高版本)中的bluez软件包包括一个名为sdptool的实用程序,可用于检查蓝牙设备是否配置为a2dp接收器。这是在我的蓝牙耳机上运行的sdptool的输出(该地址取自gnome-control-center的“ Bluetooth settings”对话框):

$ 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计算机用作蓝牙音频的输出(接收器)。

如果您进行编辑/etc/bluetooth/audio.conf,则可以通过在该[General]部分下面添加以下行来启用a2dp接收器支持:

  Enable=Source

这两者的名称都违反了直觉(因为我们在此处添加的是蓝牙接收器支持,而不是源支持),并且与此文件中的注释矛盾,后者声称默认情况下启用了所有已实现的服务。:(

进行此更改后,您需要通过运行重启蓝牙sudo service bluetooth restart

如果您之前曾尝试将Android设备和Ubuntu计算机配对,则需要删除双方的配对并重新配对,以使Android能够将Ubuntu识别为可用的音频设备。

完成此操作后,Android设备应在PulseAudio下显示为输入设备。如果PulseAudio未检测到新的蓝牙音频源,则可能需要从命令行安装和加载蓝牙模块:

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

然后,您需要告诉PulseAudio使用回送连接(从源到接收器的直线)将此音频输入路由到输出/接收器(例如扬声器或蓝牙耳机)。

更高版本的PulseAudio可能包含模块蓝牙策略,并且可能已经为您设置了回送设备,但这似乎不是最常见的情况。

设置回送连接的半自动方法(如果还安装了pavucontrol GUI程序)是简单地加载回送模块并使用pavucontrol对其进行配置,因为PulseAudio会记住设置。使用pactl从命令完成模块的加载:

 pactl load-module module-loopback

如果您还没有听到任何声音,或者您收到奇怪的反馈效果,请不要担心,我们需要告诉新创建的设备是从哪个源获取输入的,哪个接收器首先将输出发送给的。

打开pavucontrol并打开其“配置”选项卡。确保您的蓝牙设备显示在此处(使用blueman-manager或其他蓝牙工具与之配对后),并且配置文件设置为A2DP。切换到“输入设备”选项卡,并确保您的设备也显示在此处且未静音。现在切换到“录制”选项卡,并使新创建的回送连接将您的设备用作源,并在“静音”按钮旁边选择框。切换到“播放”选项卡以选择回送连接应以相同方式使用的接收器。如果选项卡中未显示环回设备,请确保使用每个选项卡底部的选择框显示所有流。

现在,您应该从设备(如果正在播放),扬声器或所选的任何输出接收器中听到音频。当您的设备断开连接时,回送设备将回退到可用的接收器和源,这可能是不希望的,因此请确保将回送设备静音,直到需要它为止。借助module-*-restore模块,下次连接相同的Bluetooth设备时,回送连接将恢复相同的接收器/源。

如果这不起作用,或者您没有安装pavucontrol,则可以改用以下方法设置环回:

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

(替换$BTSOURCE为PulseAudio所见的蓝牙设备的源名称,例如bluez_source.14_DA_E9_2A_D7_57;并替换$SINK为要将音频流发送到的PulseAudio输出的名称,例如:alsa_output.pci-0000_00_1b.0.analog-stereo。。您可以完全省略接收器参数并使其回退到活动接收器,然后稍后通过pavucontrol进行更改。)

  • 你可以找到$SINKpactl list sinks,它的后出Name:
  • 同样,您可以看到$BTSOURCE带有pactl list sources
  • source_dont_move参数可防止在断开蓝牙设备连接时环回连接回退到另一个音频源。相反,它已被删除,您下次必须重新设置。

下面是一个例子一个是什么样子(别忘了将:_蓝牙地址!):

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源的名称。您也可以使用load-module命令返回的ID卸载模块:

$ 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

参考文献:

  • 博客文章概述了有关如何在Ubuntu中修复该问题的一些详细信息。

我们可以更改特定设备接收器的通道图
吗?

您好,谢谢您的详细指南。该命令pactl load-module module-bluethooth-discover在ubuntu studio 14.04中失败。因此,即使手机正确地将PC视为音频接收器,我也看不到中的任何bluez来源pulseaudio。有任何想法吗?
nas 2014年

如果pactl list sources short没有为您显示bluez源,我发现了两种可能的解决方案:调用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脚。否则,请在手机侧连接,然后开始播放音乐。
特维诺

我仍然看不到来自bluez的任何消息。Linux Mint 17.3“ Rosa”在这里。
donquixote

1
哇!只需最少的更改(/etc/bluetooth/main.conf而不是audio.conf),即可在Rasbian上运行。谢谢!(在该OS中不需要回送配置)
jamie

13

我使用从Ubuntu软件中心安装的blueman。右键单击Blueman图标*->“本地服务”->音频->选中“高级音频接收”。顺便说一句,我用它来在我的Ubuntu 11.10笔记本电脑上听我在Android手机上播放的内容。

* blueman图标显示在gnome shell + ubuntu 11.10的右下角,这是我的情况。我希望这对您有所帮助。


音频的blueman配置界面仅在/etc/bluetooth/audio.conf中设置Enable = Source值,因此我看不到这如何使android将计算机用作音频输出。
slangasek 2012年

好了,所以如果我设置在audio.conf,然后从解除配对双方连接的双方,这似乎是足以让Android的看到了计算机毕竟音频接收器...
slangasek

我尝试了一下,却无法将其识别为音频接收器。:-/
Jorge Castro 2012年

blueman在12.04中为我工作时出现了零问题,但事实是我最终在指标小程序中出现了两个蓝牙图标。
HDave 2012年

7

现在在Ubuntu 12.04中非常简单

连接您的蓝牙设备

搜索您的蓝牙设备,并记下其源编号:

pactl list sources 

对蓝牙设备进行环回:

pactl load-module module-loopback source=$SOURCE_NUMBER  

$ SOURCE_NUMBER是您之前记下的数字。

例如,我输入以下内容以使音频播放正常工作:

$ pactl load-module module-loopback source=3  

而已!我发现最上面的答案中的解决方案有点复杂,因此我以这种方式进行了简化(减少了打字和复制/粘贴操作)。虽然如果您删除蓝牙设备之前列出的所有音频设备,我的解决方案可能会中断pactl list sources

另外,在断开蓝牙设备的连接之前,请不要忘记卸下环回模块:

记下您创建的回送设备的模块号:

pactl list short modules

卸下回送设备:

pactl unload-module $MODULE_NUMBER

先前的答案是在12.04发行之前编写的,因此,我确定会有所更改。例如,我不必手动启用将蓝牙设备用作音频源(默认情况下已启用)。但是,有时我确实需要在手机的蓝牙设置中切换“媒体音频”配置文件(运行CyanogenMod 9.1.0的Samsung Captivate)。

可能有一种利用shell脚本监视蓝牙A2DP设备连接并自动为其加载回送模块的方法来利用dbus-monitor,但这有点麻烦。

希望我们在Ubuntu 12.10中不再需要手动执行此操作。


在为特定接收器加载模块环回之后,我们可以将特定设备的模块环回的通道图更改为左还是右
Prakash V Holkar 2014年

3

对于13.04,将您的源设备与ubuntu笔记本电脑配对即可使用!很高兴发现现在是如此简单。



0

比答案更简单的解决方案。

你可以去

sudo apt-get install pulseaudio*

然后重启。重新启动后,连接到蓝牙并仅在手机上播放音乐。一切都会传输到您的计算机,并在计算机的扬声器上播放。

是的!别客气。


apt-get使用正则表达式,而不使用通配符。因此,您不知道将使用什么安装pulseaudio*(提示:不仅仅是以开头的软件包pulseaudi)。而且PulseAudio已经是默认Ubuntu安装的一部分。
muru

是! 但这将对所有希望立即使工作正常工作的懒惰人起作用。
Adel Abula-MageBinary 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.