2010-04-10 23 views
2

我試圖寫最小的代碼塊來縮小問題。現在只是幾行,它不起作用,這很明顯,我對如何使用AudioFileReadPackets有一個基本的誤解。我在網上閱讀了文檔和其他示例,顯然我沒有收到。你能解釋給我嗎?我只是沒有得到AudioFileReadPackets

以下是該塊應該做的事情:我以前打開過一個文件。我只想讀取一個數據包 - 文件的第一個數據包 - 然後打印出來。但它崩潰的AudioFileReadPackets行:

AudioFileID mAudioFile2; 
    AudioFileOpenURL (audioFileURL, 0x01, 0, &mAudioFile2); 
    UInt32 *audioData2 = (UInt32 *)malloc(sizeof(UInt32) * 1); 
    AudioFileReadPackets(mAudioFile2, false, NULL, NULL, 0, (UInt32*)1, audioData2); 
    NSLog(@"first packet:%i",audioData2[0]); 

(爲了清楚起見,我已經去掉了所有的錯誤處理。)

這是AFRP行崩潰了。我知道第三個和第四個參數是有用的,在我的「真實」代碼中,我使用它們,但它們不是必需的,對吧?因此,在這種情況下NULL應該工作,對嗎?)這是怎麼回事?

任何指導將不勝感激。

謝謝。

回答

4

我認爲你的問題是與數據包的參數。你只是創建一個指向0x00000001的指針。問題是它試圖使用這是輸出多少包實際讀取。您的音頻緩衝區也可能太小。根據文檔,它應該是數據包的長度乘以數據包長度的上限。

試試這個:

AudioFileID mAudioFile2; 
AudioFileOpenURL (audioFileURL, 0x01, 0, &mAudioFile2); 
UInt32 packetCount = 1; 
void *audioData2 = (void *)malloc(packetCount * maxPacketSize); 
AudioFileReadPackets(mAudioFile2, false, NULL, NULL, 0, &packetCount, audioData2); 
NSLog(@"first packet:%i",audioData2[0]); 

不能確定如何獲得maxPacketSize(從來沒有與這個工作)。

相關問題