在 iPhone 上拆分音频单元流

Posted

技术标签:

【中文标题】在 iPhone 上拆分音频单元流【英文标题】:Splitting up Audio Unit streams on the iPhone 【发布时间】:2011-01-24 19:44:11 【问题描述】:

我正在开发一种方法,将多个传感器信号一起调制成一个信号,通过音频输入输入 iPhone。我需要做几件事:

    解调这些信号从 通过一个简单的输入信号 过滤器链,然后输出每个 沿着自己的信号路径进一步 处理——必须是实时的。 播放每个声音的声音版本 信号——最好是实时的。 通过一个流式传输每个信号 网络连接——最好 实时。 将每个信号存储在 PCM 中 文件——不必是实时的。

我需要帮助来概念化此过程中的信号链。我已经开始使用音频单元绘制设计草图。首先,我选择Audio Units是不是太低级了?这可以通过音频队列服务实现吗?尽管如此,我已经到了调制信号进入的地步(还没有解调它),正在实时对其进行声化,并将声化后的信号传回输出端。现在,为了将此信号拆分为信号链的两个单独部分,我会想象做一些事情,例如将远程 I/O 单元的输出路由到多通道混音器单元上的两个单独的输入总线,然后进行声化/写入-disk/writing-to-network 在多通道混合器单元的回调中。

但是,对于实时线程来说,这是否过多的处理?我真的能够做到这一点,还是需要将一些功能离线?其次,是否可以将 I/O 单元的输入单元的输出路由到多通道混音器单元的单独输入单元?如果没有,我能否指定多通道流描述,并拆分来源

【问题讨论】:

【参考方案1】:

ios 设备上当然可以进行多声道音频解调。它是使用 DSP IIR 滤波器组、FFT 滤波等完成的。ARM NEON 矢量单元比几年前的许多专用 DSP 芯片具有更强的 DSP 处理能力。

我建议仅将音频单元或音频队列服务用于数据采集。然后只需将 PCM 样本排队并将它们提供给您的 DSP 处理模块。

能否通过网络流式传输数据取决于通道数、每个通道的数据速率、数据压缩率、网络带宽的变化等。

【讨论】:

我听说我根本不需要降级到音频单元吗?好吧,至少我喜欢学习它!说真的,如果我只是使用其中一种工具进行采集,我应该尽快离线处理,然后在我准备好时推送到扬声器/文件/网络,还是我误解了你的建议? 或者,如果我可以实时完成所有这些工作,我是否可以指定一个五通道或六通道流并将原始单声道信号分成这些流? 您只需要音频单元即可获得最低延迟。否则,只需将足够的数据排队并在后台线程中处理。 6 个频道是小菜一碟。我有 iPhone 吉他调音器,可以处理尽可能多或更多的通道,并将它们全部(近乎)实时可视化。 所以,当您说“将 PCM 样本排队并将它们提供给您的 DSP 处理块”/“...在后台线程中”时,您的意思是要留下 Core Audio工作,然后将处理后的数据重新引入主线程上的Audio Unit链(或其他框架)进行声化?

以上是关于在 iPhone 上拆分音频单元流的主要内容,如果未能解决你的问题,请参考以下文章

为啥此音频单元 RemoteIO 初始化在 iPhone 上有效,但在模拟器中无效?

iphone - 在后台播放音频流

如何构建音频文件流 iPhone 应用程序?

如何在 iPhone 上实现音频流 <50 毫秒的延迟

iPhone音频流 - 保存状态?

笔记- iphone手机音频AAC视频H264推流 iphone手机推流最佳方案