2011-09-25 108 views
1

我想在iOS上離線處理音頻,但有關於內存使用情況的查詢。如果我使用AVAssetReader將MP3解壓縮爲原始PCM數據,則內存佔用將非常巨大。那麼如果解壓縮會導致應用程序使用太多內存,我將如何處理(離線FFT)mp3文件?我想我必須以某種方式流式傳輸,但我不知道如何在iOS中執行此操作。文件解壓縮內存佔用

回答

0

AVAssetReader可以使用AVAssetWriter寫入文件。

要獲取PCM,您可以編寫WAV文件格式,然後在讀取時跳過RIFF標頭。然後你只需要在你的FFT長度需要的任何時候從WAV文件中提取儘可能多的數據到內存中。如果每個FFT的長度超過100萬個樣本,這應該只會導致內存佔用問題。

您可以使用C/unix posix調用(fgetc等)在iOS下讀取文件流。或者從NSInputStream讀入NSData。

+0

所以,爲了澄清,我應該先執行轉換並將其寫入磁盤上的臨時文件。如果我然後在每個循環中讀取窗口數量的樣本(例如1024),那麼我在哪裏存儲所有FFT數據而不覆蓋它?我假設我需要一個外部緩衝區,因爲加速FFT執行就地功能,但是我怎麼計算這個外部緩衝區有多大,因爲我不知道在高級?它會在幾秒鐘內完成44100 *歌曲的播放時間嗎?謝謝回覆。 – Skoder

+0

這可能取決於你想要用FFT結果做什麼。 – hotpaw2

+0

我想創建一個光譜可視化器,但不是實時的。即我想預先處理整個事情。 – Skoder