我正在使用FLAC-ALAC轉碼器,並嘗試使用ExtAudioFile寫入ALAC。我正在使用FLAC庫的基於回調的系統讀取FLAC文件,這意味着FLAC文件中的每個幀都會導致函數調用。在這一號召,我建立了我的緩衝區,並調用ExtAudioFileWrite代碼如下:ExtAudioFileWrite inNumberFrames參數的適當值是什麼?
AudioBufferList * fillBufList;
fillBufList = malloc(sizeof *fillBufList + (frame->header.channels - 1) * sizeof fillBufList->mBuffers[0]);
fillBufList->mNumberBuffers = frame->header.channels;
for (int i = 0; i < fillBufList->mNumberBuffers; i++) {
fillBufList->mBuffers[i].mNumberChannels = 1; // non-interleaved
fillBufList->mBuffers[i].mDataByteSize = frame->header.blocksize * frame->header.bits_per_sample/8;
fillBufList->mBuffers[i].mData = (void *)(buffer[i]);
NSLog(@"%i", fillBufList->mBuffers[i].mDataByteSize);
}
OSStatus err = ExtAudioFileWrite (outFile, 1, fillBufList);
現在,在最後一行的數字1是一個神奇的數字的東西,我已經選擇了,因爲我想,一個幀在FLAC文件中可能對應於相應ALAC文件中的一個幀,但似乎並非如此。每次調用ExtAudioFileWrite都會返回一個-50的錯誤值(用戶參數列表中的錯誤)。顯而易見的罪魁禍首是我爲框架參數提供的價值。
那麼我問,我應該提供什麼樣的價值?
還是我吠叫錯了樹? (注:我懷疑,儘管param相關的錯誤值,真正的問題可能是緩衝區設置,所以我試圖mallocing一個零化的虛擬緩衝區,看看會發生什麼,同樣的錯誤。)
經過進一步的思考和研究,似乎術語「幀」可能意味着FLAC文檔和CoreAudio中的非常不同的東西。我已經嘗試提供每個通道的採樣數量(frame-> header.blocksize),但我仍然得到該參數錯誤。 – 2012-02-06 16:42:12