目标是使用 HFP 通过 BT 配对设备接听电话
已完成的步骤:
a. 使用的软件是
-pulsaudio-4.99.2
-Bluez-5.14
-ofono-1.14
b. 启动上述应用程序,然后使用 bluetoothctl 方法,我将手机配对并连接到 Ubuntu PC。
c. 拨打了手机。接通电话后,我尝试通过连接到 ubuntu PC 的耳机听音频。但没有听到任何声音。
d. 我尝试使用以下命令列出 bluez 接收器和源:
pactl list short sources | grep bluez_source
pactl list short sinks | grep -v Monitor | grep alsa_output.pci
e. 然后使用以下命令环回设备
pactl load-module module-loopback source=[BTSOURCE] sink=[SINK]
f. 我还编辑了 /etc/bluetooth/audio.conf 以启用
[General]
Enable=Gateway,Source,Socket,Sink,Media,Headset
如果我遗漏了什么,请帮助我。daemon.conf 文件中有什么需要修改的吗?
我也在 pulseAudio 中收到这些日志
D: [pulseaudio] module-loopback.c: Loopback overall latency is 43.55 ms + 335.02 ms + 26.97 ms = 405.54 ms
D: [pulseaudio] module-loopback.c: Should buffer 2112 bytes, buffered at minimum 3346 bytes
I: [pulseaudio] module-loopback.c: New rate of 8061 Hz not within 2‰ of 7919 Hz, forcing smaller adjustment
D: [pulseaudio] module-loopback.c: [alsa_output.pci-0000_00_1b.0.analog-stereo] Updated sampling rate to 7934 Hz.
D: [pulseaudio] module-loopback.c: Loopback overall latency is 0.00 ms + 19584.88 ms + 0.00 ms = 19584.88 ms
D: [pulseaudio] module-loopback.c: Should buffer 96 bytes, buffered at minimum 154078 bytes
W: [pulseaudio] module-loopback.c: Sample rates too different, not adjusting (8000 vs. 15699).
D: [pulseaudio] module-loopback.c: [bluez_sink.4C_21_D0_3A_29_04] Updated sampling rate to 8000 Hz.
D: [bluetooth] ratelimit.c: 134 events suppressed
D: [bluetooth] memblock.c: Pool full
D: [alsa-sink-ALC892 Analog] memblock.c: Pool full
D: [bluetooth] memblock.c: Pool full
============================================================================
请帮我 !!!
答案1
我也遇到过这个问题。如果你使用 pavucontrol 查看音频级别,你会发现音频确实进入了笔记本电脑,但音频路由(在 pulseaudio 级别)配置错误。
当您使用蓝牙将手机连接到 Linux 计算机并通过手机拨打电话时,您将看到使用 pavucontrol 中的“配置”选项卡将蓝牙配置文件切换为 HSP/HFP。您还可以检查,对于您的设备,默认接收器和源 (PulseAudio) 已切换为 bluez_sink 和 bluez_source。
为了能够在扬声器/有线耳机上获取通话音频并使用内置麦克风/有线耳机麦克风在通话中发送您的声音,请尝试此脚本。
#!/bin/bash
SOUNDCARD_SOURCE="Find using $ pacmd list-sources | grep -e 'index:' -e device.string -e 'name:'"
SOUNDCARD_SINK="Find using $ pacmd list-sinks | grep -e 'index:' -e device.string -e 'name:'"
BLUEZ_SOURCE="Find using $ pacmd list-sources | grep -e 'index:' -e device.string -e 'name:'"
BLUEZ_SINK="Find using $ pacmd list-sinks | grep -e 'index:' -e device.string -e 'name:'"
pactl unload-module `pactl list short modules | grep bluez_sink | cut -d 'm' -f 1`
pactl unload-module `pactl list short modules | grep bluez_source | cut -d 'm' -f 1`
pacmd "set-default-sink $SOUNDCARD_SINK"
pacmd "set-default-source $SOUNDCARD_SOURCE"
pactl load-module module-loopback source=$SOUNDCARD_SOURCE sink=$BLUEZ_SINK latency_msec=1
pactl load-module module-loopback source=$BLUEZ_SOURCE sink=$SOUNDCARD_SINK latency_msec=1
它所做的只是卸载通过配置加载的 pactl 环回模块,并将您的麦克风与 bluez_sink 连接,并将 bluez_source 与您的扬声器/耳机连接。
这是我第一次发布解决方案,因此请发表评论以获得进一步的说明。
答案2
使用 Bluez 和 ofono 您可以实现这一点。
我已经尝试使用 bluez 4.x。不确定它是否适用于 bluez 5.x。
https://bugs.freedesktop.org/show_bug.cgi?id=73325
首先要确保硬件支持 HFP。
$ sdptool browse local
这将列出所有受支持的配置文件。它应该显示类似以下内容的内容:
Service Name: Hands-Free Audio Gateway
Service RecHandle: 0x10002
Service Class ID List:
"Handsfree Audio Gateway" (0x111f)
"Generic Audio" (0x1203)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 13
Profile Descriptor List:
"Handsfree" (0x111e)
Version: 0x0105
Service Name: Hands-Free
Service RecHandle: 0x10003
Service Class ID List:
"Handsfree" (0x111e)
"Generic Audio" (0x1203)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 7
Profile Descriptor List:
"Handsfree" (0x111e)
Version: 0x0105
下一步是使用蓝牙控制或 GUI 将您的手机与电脑配对。现在您需要使用 ofono 检查调制解调器。在这里您的手机充当调制解调器。转到 ofono 测试目录并输入
$./list-modems
现在它应该会在列表中列出您的手机。接下来启用它
$./enable-modem
开始拨打您的电话,您将能够将语音传送到电脑。