【问题标题】:Audio routing from multiple BT headsets on Mac, with real-time up-sampling from the mic's frequency来自 Mac 上多个 BT 耳机的音频路由,对麦克风频率进行实时上采样
【发布时间】: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-loopbackmodule-pipe-sourcemodule-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


【解决方案1】:

解决方案一直在我的眼皮底下。事实证明,MacOS/X 可以将多个音频设备组合成一个“聚合设备”,正如on Roland's company blog 所解释的那样。应注意对来自耳机的音频通道启用漂移校正。

【讨论】:

    【解决方案2】:

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

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

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

    (Audio Unit)

    【讨论】:

    • 我的目标是使用现有工具而不进行开发。 Jack、PulseAudio 和 Roc 都已经构建在 CoreAudio 之上,至少用于设备访问。
    猜你喜欢
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    相关资源
    最近更新 更多