簡體   English   中英

核心音頻大(壓縮)文件播放和內存占用

[英]Core Audio Large (Compressed) File Playback and Memory Footprint

因此,我設置了一個多通道混合器和一個遠程I / O單元,以混合/播放從音頻文件中讀取的PCM數據的多個緩沖區。 為了在游戲中產生短暫的聲音效果,我使用ExtAudioFileRead()將整個文件加載到內存緩沖區中。

對於我的背景音樂,假設我有一個3分鍾的壓縮音頻文件。 假設它被編碼為mp3 @ 128 kbps(44,100 Hz立體聲),則每分鍾大約1 MB,或總計3 MB。 如果沒有記錯的話,在內存中,如果沒有記錯的話,我相信它大約是它的十倍。 我可以使用與小型文件完全相同的方法; 我相信ExtAudioFileRead()會在可能的情況下使用(單個)硬件解碼器來處理解碼,但是我寧願不要一次讀取整個緩沖區,而應該定期從磁盤“流式處理”它。

首先想到的是將音頻文件服務API(非“擴展”)向下移動一個步驟,並使用AudioFileReadPackets() ,如下所示:

  1. 准備兩個緩沖區A和B,每個緩沖區足夠大以容納(說)5秒鍾的音頻。 在播放過程中,從一個緩沖區開始讀取,並在到達末尾時切換到另一緩沖區(即,它們組成了環形緩沖區的兩半)。

  2. 從文件中讀取音頻的前5秒到緩沖區A。

  3. 從文件中讀取接下來的5秒鍾音頻到緩沖區B。

  4. 開始播放(從緩沖區A開始)。

  5. 播放頭進入緩沖區B后,請將接下來的5秒鍾音頻加載到緩沖區A中。

  6. 播放頭再次進入緩沖區A后,請將接下來的5秒鍾音頻加載到緩沖區B中。

  7. 轉到#5

這是正確的方法,還是有更好的方法?

我建議使用高級AVAudioPlayer類對音頻文件進行簡單的后台播放。 參見: https : //developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAudioPlayerClassReference/Chapters/Reference.html#//apple_ref/doc/uid/TP40008067

如果您需要更細粒度的控制和更低的延遲,請查看Apple的AUAudioFilePlayer。 有關討論,請參見AudioUnitProperties.h。 這是一個音頻單元,從磁盤上提取流音頻文件的復雜性。 也就是說,它的設置和使用仍然非常復雜,因此請務必首先嘗試AVAudioPlayer。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM