使用 AVAudioPlayer 处理钢琴样本——内存管理

Posted

技术标签:

【中文标题】使用 AVAudioPlayer 处理钢琴样本——内存管理【英文标题】:Using AVAudioPlayer for piano samples -- memory management 【发布时间】:2012-05-06 20:58:28 【问题描述】:

我正在编写一个包含钢琴的简单 ios 应用。

我只需要一些非常基本的东西,我可能会采用这种方法:

每个钢琴键都有一个 .mp3 文件 酌情使用 AVAudioPlayer 播放 .mp3

我的理解是一个AVAudioPlayer实例只能用一个声音。因此,我必须为每个钢琴键创建许多 AVAudioPlayers(准确地说是 88 个)。

我的问题是,AVAudioPlayer 的内存密集程度如何?我可以通过创建 88 个AVAudioPlayers 来初始化程序,将它们保存在内存中,并酌情使用它们吗?或者AVAudioPlayer 的内存占用是否太大,我是否应该只根据需要分配/释放AVAudioPlayers?如果是这样,分配/释放玩家是否足够快,以至于用户不会注意到任何延迟?

【问题讨论】:

为什么不尝试创建 10 个左右的 AVAudioPlayer 实例并监控 Instruments 中的内存占用?如果看起来没问题,那么增加实例并看看它是如何进行的。 另外,我建议使用 IMA4 (CAF) 音频格式,因为它可以减少 iDevice 的处理压力。 【参考方案1】:

此项目使用 OpenAL SoundBankPlayer 作为该功能的解决方案。另一种方法是使用 soundFont 和 Sampler AudioUnit。非常适合音乐创作类型的应用程序。好的细节和源代码:AudioGraph

【讨论】:

以上是关于使用 AVAudioPlayer 处理钢琴样本——内存管理的主要内容,如果未能解决你的问题,请参考以下文章

音频处理乐器音符播放时电流处理 ( 使用均衡器调节低频 )

使用 AVAudioPlayer 同时播放多个声音

开源钢琴键盘ios [关闭]

AVAudioPlayer- 从声音缓冲区播放

免费软件物理建模钢琴?

钢琴声音的跳动和两级衰减