我正在研究 FLAC-to-ALAC 转码器并尝试使用 ExtAudioFile 写入 ALAC。我正在使用 FLAC 库的基于回调的系统来读取 FLAC 文件,这意味着 FLAC 文件中的每一帧都会导致一个函数调用。在该调用中,我设置了缓冲区并调用 ExtAudioFileWrite 代码,如下所示:
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(用户参数列表中的错误)。明显的罪魁祸首是我为 frame 参数提供的值。
所以我问,那么,我应该提供什么价值?
还是我在叫错树?
(旁注:我怀疑,尽管存在与参数相关的错误值,但真正的问题可能是缓冲区设置,所以我尝试分配一个归零的虚拟缓冲区,看看会发生什么。同样的错误。)