当我经常停止并开始音频播放并通过ExtAudioFileRef
对象在AAC音频文件中来回寻找大量问题时,会出现问题。在少数情况下,ExtAudioFileRead
显示这种奇怪的行为:
有时会将这些数字分配给mDataByteSize
的唯一AudioBuffer
的{{1}}:
AudioBufferList
以十六进制表示,这些数字的格式为-51604480
-51227648
-51350528
-51440640
-51240960
。
代码:
0xFC....00
输出:
status = ExtAudioFileRead(_file, &numberFramesRead, ioData);
printf("s=%li d=%p d.nb=%li, d.b.d=%p, d.b.dbs=%li, d.b.nc=%li\n", status, ioData, ioData->mNumberBuffers, ioData->mBuffers[0].mData, ioData->mBuffers[0].mDataByteSize, ioData->mBuffers[0].mNumberChannels);
问题出现在iOS 7上的iPhone 4S上。我无法在模拟器中重现该问题。
答案 0 :(得分:0)
当从两个不同的线程/队列同时为ExtAudioFileRead()
调用ExtAudioFileSeek()
和ExtAudioFileRef
时,会出现问题。
read函数是直接从AURenderCallback
调用的,所以它是在AudioUnit的实时线程上执行的,而搜索是在我自己的串行队列上完成的。
我已经将render回调的代码修改为dispatch_sync()到调度seek被调度到的同一个串行队列。这解决了这个问题。