2011-09-16 55 views
1

我想讀取一個聲音文件,我自己生成這個文件,這樣我就可以選擇任何可以輸出的大膽聲音,在一個浮點數組中,這樣我就可以浮動mySoundOneSecond [44100];並充分利用這些數據,以便我可以在iOS設備上操作那些'原始'浮點數據。如何在iOS上將聲音文件讀入浮點數組?

回答

1

您將不得不在CoreAudio中使用ExtFileReader C API。這會將你的文件讀入lPCM。但是請注意,從技術上講,您獲得的緩衝區不會保留浮點值,而是類型爲AudioUnitSampleType的8.24位定點整數。不要被這種typedef所欺騙,它是8.24bit。

0

NSMutableData可能是您閱讀此文件的最簡單方法。類似這樣的::

NSMutableData *data = [NSMutableData dataWithContentsOfFile:path options:0 error:&error]; 
if (!data) { ... do something with the error ... } 

float *mySoundOnSecond = [data mutableBytes]; 

您可能希望在您的選項中通過NSDataReadingMapped這種類型的應用程序。通過將文件映射到內存而不是一次讀取所有內容,這將爲您節省一些時間。

請注意,這種方法會阻止它所在的線程。如果文件很大,您可以在後臺線程上執行或使用異步讀取方法。有關各種選項,請參閱File System Programming Guide

+0

嗨,Rob,謝謝 - 性能問題對於我正在做的事情沒什麼大不了的 - 但是我可以使用什麼格式的音頻,哪裏完全是原始的,沒有標頭或任何東西......讀取字節好的,理解,當然,但是什麼格式會給我正確的endian'd和無格式字節這種格式?謝謝 – Nektarios

+0

這通常被稱爲「RAW」或「PCM」格式。我不知道Audacity是否會寫這些。 –