如何使支持aptX的蓝牙设备与Ubuntu系统兼容?

我有一副支持aptX的耳机,我想在Ubuntu中使用它以获得耳机在技术上能提供的最高音质来播放音乐。我该如何做到这一点?
虽然A2DP支持很多可选的编解码器,并且可以扩展以支持其他厂商定义的编解码器,但是AptX不仅声称提供比竞争对手更好的音频质量,还宣传减少延迟,使观看视频时的音频与嘴唇同步。
以下是我的问题:
- 如何让支持aptX的蓝牙设备在Ubuntu中使用这种编解码器? - 有哪些解决方案可用?
- 如何检查和验证已建立的连接所使用的编解码器?
我想指出,虽然这篇文章看起来像是一篇赞助帖子,但实际上并不是。在我看来,FLAC和Opus应该成为黄金标准,但据我所知,目前还没有支持这些编解码器的设备可用。
3个回答

2021年更新:PulseAudio支持AptX、LDAC - https://9to5linux.com/pulseaudio-15-0-released-with-support-for-ldac-and-aptx-codecs-improved-hardware-support 2018年10月27日编辑:PulseAudio正在开发LDAC、APTX(-HD)和AAC的支持。EHfive在GitHub上有一个存储库,其中包含补丁,还有一个适用于18.04及以上版本的PPA,请查看Wiki获取更多信息。看起来这些补丁将在某个时间点上游到达。我在18.04上检查了PPA,它可以正常工作,尽管它将PA 11.1替换为12,并安装了更新版本的ffmpeg和x265。

编辑于2017年12月18日:几周前我可能错过了,但是现在FFmpeg中似乎有一个编码器。据我所知,目前没有用户友好的解决方案。

简短回答

您必须使用特殊品牌的蓝牙适配器。请查看本答案的然后我如何使用aptX?部分,或浏览aptx.com网站以获取发射器


更详细的回答

许可问题

aptX编解码器是一种专有标准,CSR从APT Licensing Ltd.收购了该标准,旨在通过成分品牌推广开发和销售aptX高保真蓝牙音频解决方案。你说得对,这是CSR销售独家芯片的策略。

我在查看解码器许可协议时找到了以下条款:

  • 将软件实现为嵌入在被许可产品中的安全代码固件
虽然这并没有回答关于编码器的问题,但我可以说,情况至少和其他专有编解码器和软件组件一样困难(123)。
那么,我该如何使用aptX呢?
你可以使用它,只是不能作为免费软件解决方案。

您可以找到特别品牌的蓝牙适配器,被称为aptX发射器。这些不是典型的纳米或皮克尺寸的蓝牙适配器,而是USB音频类设备。(请查看维基百科上USB文章的设备类别部分获取更多信息。)这意味着这些设备将被识别为声卡,并且不会提供给主机计算机蓝牙连接功能。但也有一个主要缺点:它们的价格几乎是普通蓝牙适配器的10倍。

按字母顺序列出的aptX发射器支持aptX的蓝牙适配器清单:

  • Creative BT-D1 USB蓝牙发射器,蓝牙2.1 + EDR
  • Creative BT-W1/BT-W2 USB,蓝牙2.1 + EDR
  • Sennheiser BTD 500 USB,蓝牙3.0
  • Avantree BTDG-50-WGR,蓝牙4.1 with aptX LL
  • 1mii B10,蓝牙5.0 with aptX LL,通过AskNoah,ASIN:B083TD9VW4(美国),B086KXR1CF(德国)
  • Avantree DG80,蓝牙5.0 with aptX LL
    • 外观与1mii B10相似,可能是同一款。作为赞助的亚马逊搜索结果出现。我打算测试两者,尤其是在立体声模式下与两个Nest Audio一起使用,目前存在1秒的延迟,我需要在PulseAudio中进行调整。

检查连接的配置编解码器

安装bluez-hcidump并运行sudo hcidump avdtp,然后连接设备并寻找配置协商。以下是我得到的结果(参见also),看起来它尝试了aptX、AAC,最终选择了SBC。
$ sudo hcidump avdtp
HCI sniffer - Bluetooth packet analyzer ver 5.35
device: hci0 snap_len: 1500 filter: 0x400
< AVDTP(s): Discover cmd: transaction 11 nsp 0x00
> AVDTP(s): Discover rsp: transaction 11 nsp 0x00
    ACP SEID 5 - Audio Sink
    ACP SEID 3 - Audio Sink
    ACP SEID 1 - Audio Sink
< AVDTP(s): Capabilities cmd: transaction 12 nsp 0x00
    ACP SEID 5
> AVDTP(s): Capabilities rsp: transaction 12 nsp 0x00
    Media Transport
    Media Codec - non-A2DP (aptX)
      16kHz 32kHz 44.1kHz 48kHz 
      Stereo 
< AVDTP(s): Capabilities cmd: transaction 13 nsp 0x00
    ACP SEID 3
> AVDTP(s): Capabilities rsp: transaction 13 nsp 0x00
    Media Transport
    Media Codec - MPEG-2,4 AAC
      MPEG-2 AAC LC MPEG-4 AAC LC 
      8kHz 11.025kHz 12kHz 16kHz 22.05kHz 24kHz 32kHz 44.1kHz 48kHz 
      1 2 Channels
      320000bps VBR
    Content Protection
      02 00 
< AVDTP(s): Capabilities cmd: transaction 14 nsp 0x00
    ACP SEID 1
> AVDTP(s): Capabilities rsp: transaction 14 nsp 0x00
    Media Transport
    Media Codec - SBC
      16kHz 32kHz 44.1kHz 48kHz 
      Mono DualChannel Stereo JointStereo 
      4 8 12 16 Blocks
      4 8 Subbands
      SNR Loudness 
      Bitpool Range 2-53
    Content Protection
      02 00 
< AVDTP(s): Set config cmd: transaction 15 nsp 0x00
    ACP SEID 1 - INT SEID 1
    Media Transport
    Media Codec - SBC
      44.1kHz 
      JointStereo 
      16 Blocks
      8 Subbands
      Loudness 
      Bitpool Range 2-53
> AVDTP(s): Set config rsp: transaction 15 nsp 0x00
< AVDTP(s): Open cmd: transaction 0 nsp 0x00
    ACP SEID 1
> AVDTP(s): Open rsp: transaction 0 nsp 0x00
< AVDTP(s): Start cmd: transaction 1 nsp 0x00
    ACP SEID 1
> AVDTP(s): Start rsp: transaction 1 nsp 0x00
< AVDTP(m): ver 2 cc 0 pt 1 seqn 0 time 0 ssrc 1
< AVDTP(m): ver 2 cc 0 pt 1 seqn 1 time 896 ssrc 1

故障排除

  • A2DP只能单向传输音频,如果要进行电话通话,请使用HSP/HFP配置文件。
  • 如果耳机或设备无法被识别,或者在例如VLC中没有列出作为输出设备,尝试通过声音设置切换到另一个声卡,然后再切换回来。设备应该会被识别。

Ubuntu手机怎么样?

我不知道Ubuntu手机是否支持这种编解码器。CSR文档中提到解决方案适用于Android设备制造商,所以我认为这取决于手机制造商是否以及如何支持。当然,Ubuntu Touch通常支持蓝牙耳机,我成功地将我的运行Ubuntu的Nexus 4与我测试过的耳机配对了。


我的经验和测试

已测试的蓝牙模块和适配器:

  • 带有纳米蓝牙2.1和4.0适配器的台式机,内置模块的Lenovo T530。- 在播放来自FLAC文件的音乐时,A2DP几乎达到了与BTD 500相同的音质水平。电影的音频与14.04同步。
  • Sennheiser BTD 500 USB。- 配对所需时间与普通非NFC适配器一样长。

已测试的耳机:

  • Philips Fidelio M1BTBL,蓝牙4.0。- 与所有适配器和模块兼容,工作正常。
  • Sony MDR-10RBT,蓝牙3.0,NFC。- 与所有适配器和模块兼容,工作正常。
  • Creative Sound Blaster EVO ZxR,蓝牙2.1,NFC。- 这款耳机的接收范围是三款中最好的,但无法连接到BTD 500。

3你是怎么检查设备是否真正使用aptX而不是SBC连接的? - pseudosavant
Avantree也有一款产品,型号为BTDG-50-WGR。不,我并不是为他们工作,只是提供一个好的信息给大家知道。 - Mtl Dev
出于好奇,绝对不是因为我绝对不会为个该死的转接头支付40美元,没人重新构建过二进制/创建过可在某些不正当地方购得、能像aptx一样连接的替代品吗? - Jezor
1@Jezor 我没有在不可靠的地方寻找,因为我对此并没有太大的兴趣或技术能力,而且那时候我也没有找到任何相关信息。也许有些人找到了,我不清楚,但我更倾向于选择开源解决方案,正如我之前所写的。据我所知,LDAC似乎使aptX变得过时,并且更加开放。 - LiveWireBT
Azio BTD-v401也宣传支持aptX功能,但我无法评论其与Ubuntu或任何Linux系统的兼容性。 - kapad
我在我的Ubuntu 16.04上尝试了附带的Sennheiser Precense UC的BTD 800。它确实被识别为声卡。与使用相同耳机的蓝牙(A2DP)相比,播放质量稍微有所下降。根据适配器的LED指示,它使用SBC编解码器。然而,一旦我开始使用BTD 800的麦克风(非蓝牙),音频质量严重下降,但是当使用HSP/HFP配置文件通过蓝牙连接耳机时,音质仍然要好得多,并且麦克风录音质量也更好。因此,即使没有apt-x,这个适配器对我来说仍然有很大的区别。 - Zaar Hai
事情有些变化,我先在这里留下链接给其他人,因为我的研究首先带我来到这里。我会报告这个方法的效果如何。https://github.com/EHfive/pulseaudio-modules-bt - marco
现在有一些软件包可以让在Ubuntu 18.04上安装Apt-X变得非常简单。 https://github.com/EHfive/pulseaudio-modules-bt/wiki/Packages - Kat Amsterdam
HOUSON和BlitzWolf都以10多块的价格销售这样的适配器。 - marco

≥ 2021:使用Pipewire

Pipewire通过libfreeaptx0支持APT-X。

要安装它,请按照pipewire-debian ppa的说明进行操作,简要概述如下:

sudo add-apt-repository ppa:pipewire-debian/pipewire-upstream
sudo apt install gstreamer1.0-pipewire libpipewire-0.3-{0,dev,modules} libspa-0.2-{bluetooth,dev,jack,modules} pipewire{,-{audio-client-libraries,pulse,media-session,bin,locales,tests}}
systemctl --user --now disable pulseaudio.{socket,service}
systemctl start --user pipewire-pulse.service
systemctl enable --user pipewire.service
systemctl --user mask pulseaudio

KDE中的附加编解码器图片(适用于不支持apt-X的设备) KDE中的附加编解码器

也许你不需要aptX - 因为有

最近,在Linux中添加了“生活技巧”。根据this blog

SBC XQ的音频质量可与aptX HD相媲美。

也许你想试一试。在我的机器上,我可以通过选择和。


1谢谢提供的信息。我最近关注的主要问题不是音频质量,而是由于SBC在一些看似更不寻常的设置中引起的延迟,比如将两个Nest Audio配对成立体声模式,并将它们用作蓝牙桌面扬声器。但这是另一个话题了。 - LiveWireBT