我是Linux的新手,也是Bluetooth脚本的新手。到目前为止,我发现的是以下内容:
- Bluez是默认的BT堆栈。
- BluezTools是一组实用程序,可用于更轻松地与Bluez进行交互
- DBus是Bluez与硬件直接交互时所连接的接口。
- PulseAudio是负责在系统上产生音频的子系统。
这是有道理的。因此,假设我有一套蓝牙耳机,我期望的是(都在配对和信任之后),以便能够发出可以直接连接到BT耳机上特定配置文件的命令。
我想到的技术路线可能是这样的:
- 打开耳机。
- 发出BluezTools命令-例如bt-audio -c
- 等待设备连接到我要的服务
- 现在,PulseAudio应该选择一个新的输出设备
- 发出另一个命令,将音频从原来的音频更改为新的输出音频(BT耳机)。
- 享受无缝的聆听体验。
这一切似乎合乎逻辑,但是实际的实现方式并非如此,我正在寻找WHY,因此我可以更好地理解问题并尝试解决它。
实际上是这样的:
- 打开耳机。
- 发出BluezTools命令-例如bt-audio -c
- 等待设备连接到我要的服务
- 现在,PulseAudio应该选择一个新的输出设备
- 发出PulseAudio命令将音频配置文件从电话质量更改为高保真度。
让我对此进行扩展。蓝牙耳机提供2种质量模式(电话和高保真)。只有1个真正适合听音乐。
我希望BT耳机将每种质量模式作为服务公开,对吗?这个假设可能是错误的,但我希望
bt-audio -c highFidelityProfile
要么
bt-audio -changeProfile highFidelityProfile
相反,Bluez似乎只是处理与设备的RAW连接,因此您需要从那里发出:pacmd set-card-profile $ INDEX a2dp
这似乎根本上是错误的。为什么在音频子系统中进行质量控制,从而要求对脉冲或alsa或其他声音子系统进行不同的实现?
我想念什么?为什么无法使用Bluez / BluezTools等直接连接到特定配置文件?