我正在研究在iPhone SDK 3.1 Developer \ Extras \ CoreAudio \ PublicUtility中使用CARingBuffer,但是对它的某些方法有些困惑。首先,这仅对使用过该课程的任何人有意义
例如,GetTimebounds,SetTimeBounds,ClipTimeBounds函数实际上在做什么?
同样在使用它时,我在主Fetch方法中由于该方法的示例而导致崩溃
-> ZeroABL(abl,0,destStartOffset * mBytesPerFrame);
CARingBufferError CARingBuffer::Fetch(AudioBufferList *abl, UInt32 nFrames, SampleTime startRead)
{
SampleTime endRead = startRead + nFrames;
SampleTime startRead0 = startRead;
SampleTime endRead0 = endRead;
SampleTime size;
CARingBufferError err = ClipTimeBounds(startRead, endRead);
if (err) return err;
size = endRead - startRead;
SInt32 destStartOffset = startRead - startRead0;
if (destStartOffset > 0) {
ZeroABL(abl, 0, destStartOffset * mBytesPerFrame);
}
在这里,destStartOffset已变得大于abl Bufferlist的大小,因此完成内存集后,它超出了abl Bufferlist的边界,从而导致崩溃。为什么这个班没有上课以防止这种情况发生?
最佳答案
您需要下载此类的更新(错误修复)版本才能摆脱崩溃的限制。
https://developer.apple.com/library/content/qa/qa1665/_index.html