Ubuntu 中的 PulseAudio + HFP 配置文件

Ubuntu 中的 PulseAudio + HFP 配置文件

目标是使用 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

开始拨打您的电话,您将能够将语音传送到电脑。

相关内容