Я смотрю на использование CARingBuffer в iPhone SDK 3.1 Developer \ Extras \ CoreAudio \ PublicUtility, однако был немного озадачен некоторыми из его методов. Во-первых, это будет иметь смысл только для тех, кто использовал этот класс.Core Audio - 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 так, когда MemSet сделано оно превышает границы ABL Bufferlist причиной аварии. Почему этот класс не получил чеки, чтобы предотвратить это?
Я недавно была такая же проблема, и я использую обновление QA1665. – sbooth