在 iOS 上更改 AUGraph 的采样率

Posted

技术标签:

【中文标题】在 iOS 上更改 AUGraph 的采样率【英文标题】:Changing sample rate of an AUGraph on iOS 【发布时间】:2011-12-28 16:18:36 【问题描述】:

我已经实现了一个类似于ios Developer's Library 的 AUGraph。但是,在我的应用中,我需要能够以不同的采样率(可能是两种不同的采样率)播放声音。

我一直在查看 Apple 的文档,但没有找到在运行时设置采样率的方法。我一直在考虑三种可能的解决方法:

    每次我需要更改采样率时重新初始化 AUGraph; 为每个不同的采样率初始化不同的 AUGraph; 在播放前转换每个声音的采样率;

这些方法在处理器上看起来都很笨重。

在运行时更改 AUGraph 的采样率的最佳方法是什么?

【问题讨论】:

经过一些测试,我发现重新初始化 AUGraph 并没有看起来那么糟糕。我现在将遵循#1,将来可能会更改为#2。谢谢大家! 【参考方案1】:

通常是连续音频流场景的第一名。

通过使用您列出的其他方法,您的计划可能有特殊需要或好处:

#2:您需要在不需要重新初始化的情况下进行处理。 #3:您需要同时混合和处理具有不同输入采样率的两个流,尤其是当您发现自己对信号进行了多次 SRC 处理时。

但是,如果您只需要使用 SRC 进行播放并且不需要考虑最低延迟,您可能需要尝试使用 AudioQueue。

【讨论】:

【参考方案2】:

我很确定它不能在运行时完成。解决方案#2 和#3 是你最好的选择。对于采样率转换,libsndfile 可能会根据您的需要进行调整。

【讨论】:

重采样可以在运行时完成。 iOS 5 可能有一个新的音频单元可以为你重新采样。【参考方案3】:

如果您不希望在拆除和重建音频图时出现延迟,您可能需要重新采样声音数据(除了一个采样率之外的所有数据)。

您可以在开始播放声音数据之前对其进行重新采样,也可以将实时重新采样器作为音频图的一部分运行。许多 iOS 音乐应用将后者作为内置基于采样器的合成器单元的一部分,因此该设备有足够的计算能力来执行此操作。

【讨论】:

以上是关于在 iOS 上更改 AUGraph 的采样率的主要内容,如果未能解决你的问题,请参考以下文章

如何更改插孔音频中的采样率?

如何在 Avfoundation 中正确更改采样率

为啥 MATLAB 在尝试采集数据时会更改采样率?

采样率改变后声音失真

iOS 将音频采样率从 16 kHz 转换为 8 kHz

在 iOS 中强制音频采样率