【发布时间】:2020-03-24 08:25:56
【问题描述】:
我需要接受来自多个蓝牙耳机的音频流,这些耳机只能从麦克风以 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-loopback 和 module-pipe-source 与 module-pipe-sink 结合使用.到目前为止,我一直没有收到音频或音频失真。 PulseAudio 也会在我运行它大约一分钟后退出,不管我做什么。 PulseAudio 与 macOS CoreAudio 的集成似乎很脆弱。
我无法将耳机连接到 Pi。根据this post,使用 HSP BT 配置文件的耳机麦克风输入受到的支持非常差。
我一直在考虑但仍可以尝试的一些可能性:
- 在 Raspberry Pi 或 Docker 容器内运行 Pulseaudio,并使用 Roc 通过 RTP 从 Mac 来回发送音频
- 将来自麦克风的音频混合到 Mac 的内置 AUX 输出中。并从 USB 连接声卡的 AUX 输入重新采样。
- 使用 Windows 或 Linux 而不是 Mac。
- 用 Python 编写自定义实时代码。
非常感谢您就解决此音频实时重采样和路由问题的最佳方法提出建议。
【问题讨论】:
-
Roc 在这种情况下不起作用,因为它只能从立体声设备读取。至少在 Mac 上,任何单声道或多声道都会被拒绝。
标签: audio-streaming macos-mojave resampling pulseaudio headset