我有一些非常奇怪的東西(至少對我來說,但我是一個noob)。爲什麼AudioFileReadPacketData的參數ioNumBytes會導致崩潰?
UInt32 numBytesReadFromFile;
OSStatus err = AudioFileReadPacketData(
audioFile, // The audio file whose audio packets you want to read.
NO, // is cache set?
&numBytesReadFromFile, // On output, the number of bytes of audio data that were read from the audio file.
(AudioStreamPacketDescription *)_packetDescriptions, // array of packet descriptions of data that was read from the audio file (for CBR null)
currentPacket, // the next packet to be read into buffer
&numPackets, // number of actually read buffers
_audioQueueBuffer->mAudioData
);
AudioFileReadPacketData從音頻文件讀取數據並將其放入緩衝區。
所以我的問題是關於參數numBytesReadFromFile。 Apple writes
numBytesReadFromFile:輸出時,從音頻文件中讀取的音頻數據的字節數。
到目前爲止好。 Apple在上面的示例代碼中聲明瞭numBytesReadFromFile,但對於我來說,這行代碼崩潰了!我得到一個EXC BAD ACCESS。
UInt32 numBytesReadFromFile;
我需要聲明numBytesReadFromFile這樣,一切工作正常:
UInt32 numBytesReadFromFile = 2048; // 2048 = size of my buffer
但是這個崩潰也
UInt32 numBytesReadFromFile = 12
UInt32 numBytesReadFromFile = sizeof(UInt32)
但這並不
UInt32 numBytesReadFromFile = 1021; // a random number
我不是很有經驗enced C程序員,但據我所知,我通過聲明numBytesReadFromFile來保留一些內存,並且audiofilereadpacketdata方法將其數據寫入變量的地址。如果我錯了,請糾正我。
那麼它爲什麼會崩潰?我想我沒有解決真正的問題。
我的假設是我有某種多線程問題。當我準備隊列時,我在主線程中調用AudioFileReadPacketData並聲明
UInt32 numBytesReadFromFile;
工作正常。我開始播放音頻,並調用一個回調函數,它在音頻隊列的內部後臺線程上調用AudioFilereadPacketData,併發生上述錯誤。如果我的假設是正確的,有人能夠更詳細地向我解釋這個問題,因爲我沒有多線程經驗。
謝謝。
請發佈更多代碼。最初是什麼'ioNumBytes'?它是否符合您的緩衝區大小? – sbooth 2015-02-11 13:41:01
沒有更多的代碼。一切都設置爲AudioFileReadDataPack。只需要聲明numBytesReadFromFile,並在調用AudioFileReadDataPack之前完成。 – Duc 2015-02-11 21:08:10