audio-streaming - 来自 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-loopback和module-pipe-source与module-pipe-sink结合使用。到目前为止,我一直没有收到音频或音频失真。PulseAudio 也会在我运行它大约一分钟后退出,不管我做什么。PulseAudio 与 macOS CoreAudio 的集成似乎很脆弱。
我无法将耳机连接到 Pi。根据这篇文章,使用 HSP BT 配置文件的耳机麦克风输入的支持非常差。
我一直在考虑但仍然可以尝试的一些可能性:
- 在 Raspberry Pi 或 Docker 容器内运行 Pulseaudio,并使用Roc通过 RTP 从 Mac 来回发送音频
- 将来自麦克风的音频混合到 Mac 的内置 AUX 输出中。并从连接 USB 的声卡的 AUX 输入重新采样。
- 使用 Windows 或 Linux 而不是 Mac。
- 用 Python 编写自定义实时代码。
感谢您就解决此音频实时重采样和路由问题的最佳方法提出建议。
解决方案
MAC OS X 支持 CoreAudio 框架、AudioToolkit 框架和 AudioUnit 框架。因此您可以使用 MAC 框架来解决您的需求。
如果您需要重新采样输入数据,则必须使用单独的 AudioConverter 单元。
如果您需要混音器,您可以使用音频单元来混合不同的各方。
(音频单元)
推荐阅读
- python - 使用 pyqtgraph 和 PyQt5 的多个实时绘图 GUI
- python - Python TKinter - 在画布内绘制的移动多边形对象
- angular - 过滤动态角度复选框
- javascript - 如何仅将对象属性子集的值复制到 TypeScript 中的另一个现有对象
- javascript - 幽灵般的位操作与五个
- html - 如何为 Font Awesome 5 图标赋予背景颜色?像明星
- java - 输入 100 个数字。确定哪个数字更大:正数或负数
- python - 导入“google_auth_oauthlib.flow”无法解决
- powershell - 无法在 powershell 中使用“net user xyz /add 命令
- excel - VBA中的战争纸牌游戏