首页 > 解决方案 > 来自 Mac 上多个 BT 耳机的音频路由,对麦克风的频率进行实时上采样

问题描述

我需要接受来自多个蓝牙耳机的音频流,这些耳机只能以 8KHz 或 16KHz 的低频从他们的麦克风中采样,将它们录制为 wav 文件,同时还将它们与以可接受的 44.1KHz 采样率播放的音乐实时混合或 48KHz 并通过耳机电话播放给用户。理想情况下,这将在带有 macOS 10.14 Mojave 的 Mac 上运行,但我也可以访问 Raspberry Pi 3 和运行 Windows 或 Ubuntu Linux 的 NUC。

如果不是因为需要对麦克风输入进行上采样,我可能会为此使用 Jack。然而,Jack 显然需要所有声卡的频率相同,而且似乎没有提供重新采样的设施。

到目前为止,我最接近有效解决方案的是使用 SoX。但是,它会产生大约 1 秒的可怕延迟,而且我无法使用--buffer选项来控制它。此外,Mac 上似乎没有办法指定音频输入,基本上将我限制在一个耳机上。

rec -V -c 1 -r 48000 -p | play -c 1 -r 48000 -p

我一直在尝试将 PulseAudio 的module-loopbackmodule-pipe-sourcemodule-pipe-sink结合使用。到目前为止,我一直没有收到音频或音频失真。PulseAudio 也会在我运行它大约一分钟后退出,不管我做什么。PulseAudio 与 macOS CoreAudio 的集成似乎很脆弱。

我无法将耳机连接到 Pi。根据这篇文章,使用 HSP BT 配置文件的耳机麦克风输入的支持非常差。

我一直在考虑但仍然可以尝试的一些可能性:

感谢您就解决此音频实时重采样和路由问题的最佳方法提出建议。

标签: audio-streamingmacos-mojaveresamplingpulseaudioheadset

解决方案


MAC OS X 支持 CoreAudio 框架、AudioToolkit 框架和 AudioUnit 框架。因此您可以使用 MAC 框架来解决您的需求。

如果您需要重新采样输入数据,则必须使用单独的 AudioConverter 单元。

如果您需要混音器,您可以使用音频单元来混合不同的各方。

音频单元


推荐阅读