Ios 核心音频大(压缩)文件播放和内存占用

Ios 核心音频大(压缩)文件播放和内存占用,ios,streaming,core-audio,extaudiofileread,Ios,Streaming,Core Audio,Extaudiofileread,因此,我设置了一个多通道混音器和一个远程I/O单元,以混合/播放我从音频文件读取的PCM数据的几个缓冲区。 对于游戏中的短音效,我使用ExtAudioFileRead()将整个文件加载到内存缓冲区中 对于我的背景音乐,假设我有一个3分钟的压缩音频文件。假设它被编码为mp3@128kbps(44100Hz立体声),那么每分钟大约有1MB,或者说总共有3MB。在记忆中,如果我没记错的话,我相信这是我记忆的十倍。我可以使用与处理小文件完全相同的方法;我相信ExtAudioFileRead()负责解码,

因此,我设置了一个多通道混音器和一个远程I/O单元,以混合/播放我从音频文件读取的PCM数据的几个缓冲区。 对于游戏中的短音效,我使用
ExtAudioFileRead()
将整个文件加载到内存缓冲区中

对于我的背景音乐,假设我有一个3分钟的压缩音频文件。假设它被编码为mp3@128kbps(44100Hz立体声),那么每分钟大约有1MB,或者说总共有3MB。在记忆中,如果我没记错的话,我相信这是我记忆的十倍。我可以使用与处理小文件完全相同的方法;我相信
ExtAudioFileRead()
负责解码,在可用时使用(单个)硬件解码器,但我不希望一次读取整个缓冲区,而是定期从磁盘“流式”读取

首先想到的是在下面的一步中转到(非“扩展”)音频文件服务API并使用
AudioFileReadPackets()
,如下所示:

  • 准备两个缓冲区A和B,每个缓冲区足够容纳(比如)5秒钟的音频。在播放过程中,从一个缓冲区开始读取,并在到达末尾时切换到另一个缓冲区(即,它们构成环形缓冲区的两部分)

  • 将文件中的前5秒音频读入缓冲区A

  • 将接下来5秒钟的音频从文件读入缓冲区B

  • 开始播放(从缓冲区A)

  • 一旦播放头进入缓冲区B,将接下来5秒的音频加载到缓冲区A

  • 一旦播放头再次进入缓冲区A,将接下来5秒的音频加载到缓冲区B

  • 转到第5页


  • 这是正确的方法,还是有更好的方法?

    我建议使用高级AVAudioPlayer类对音频文件进行简单的背景播放。见:


    如果您需要更细粒度的控制和更低的延迟,请查看苹果的AUAudioFilePlayer。有关讨论,请参见AudioUnitProperties.h。这是一个音频单元,它抽象了从磁盘流式传输音频文件的复杂性。这就是说,它的设置和使用仍然相当复杂,所以一定要先尝试AVAudioPlayer

    我确实需要更精细的控件和音频图形(除了播放文件外,我还做其他事情:特效、声音合成等),而且我已经习惯于使用音频单元,所以我将检查
    auauaudiofileplayer
    。谢谢好吧,我已经等了几天了,没有其他答案,所以我给你打勾。