在 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 的采样率的主要内容,如果未能解决你的问题,请参考以下文章