0

当我经常停止和开始音频播放并通过ExtAudioFileRef对象在 AAC 音频文件中来回寻找很多时,就会出现问题。在少数情况下,这种奇怪的行为表现为ExtAudioFileRead

有时它会将这些数字分配给mDataByteSize唯一AudioBufferAudioBufferList

-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);

输出:

s=0 d=0x16668bd0 d.nb=1, d.b.d=0x30de000, d.b.dbs=1024, d.b.nc=2 // good (usual)
s=0 d=0x16668bd0 d.nb=1, d.b.d=0x30de000, d.b.dbs=-51240960, d.b.nc=2 // misbehaving

该问题发生在 iOS 7 上的 iPhone 4S 上。我无法在模拟器中重现该问题。

4

1 回答 1

0

当从两个不同的线程/队列同时调用ExtAudioFileRead()ExtAudioFileSeek()相同时,就会出现问题。ExtAudioFileRef

read 函数是直接从AURenderCallback.

我已经将渲染回调的代码修改为 dispatch_sync() 到相同的串行队列,该串行队列将被分派到该串行队列中。这解决了问题。

于 2014-01-03T13:08:12.307 回答