Определение количества кадров в Core Audio AudioBuffer

Я пытаюсь получить доступ к необработанным данным аудиофайла на iPhone / iPad. У меня есть следующий код, который является основным началом пути, который мне нужен. Однако я не понимаю, что делать, если у меня есть AudioBuffer.

AVAssetReader *assetReader = [AVAssetReader assetReaderWithAsset:urlAsset error:nil];
AVAssetReaderTrackOutput *assetReaderOutput = [AVAssetReaderTrackOutput assetReaderTrackOutputWithTrack:[[urlAsset tracks] objectAtIndex:0] outputSettings:nil];
[assetReader addOutput:assetReaderOutput];
[assetReader startReading];

CMSampleBufferRef ref;
NSArray *outputs = assetReader.outputs;
AVAssetReaderOutput *output = [outputs objectAtIndex:0];
int y = 0;
while (ref = [output copyNextSampleBuffer]) {
    AudioBufferList audioBufferList;
    CMBlockBufferRef blockBuffer;
    CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(ref, NULL, &audioBufferList, sizeof(audioBufferList), NULL, NULL, 0, &blockBuffer);
    for (y=0; y<audioBufferList.mNumberBuffers; y++) {
        AudioBuffer audioBuffer = audioBufferList.mBuffers[y];
        SInt16 *frames = audioBuffer.mData;
        for(int i = 0; i < 24000; i++) { // This sometimes crashes
            Float32 currentFrame = frames[i] / 32768.0f;
        }
    }
}

По сути, я не знаю, как определить, сколько кадров содержит каждый буфер, поэтому я не могу надежно извлечь из них данные. Я новичок в работе с необработанными аудиоданными, поэтому я m открыт для любых предложений о том, как лучше всего читать свойство mData структуры AudioBuffer. Я также мало что делал с указателями void в прошлом, поэтому помощь в этом контексте тоже была бы замечательной!

7
задан macinjosh 28 November 2010 в 22:13
поделиться