Получение образцов данных AVAssetReader - PullRequest
2 голосов
/ 29 сентября 2011

Я пытаюсь получить данные PCM из MP3. Я использую AVAssetReaderOutput, и кажется, что чтение данных нормально.

while(true)
{
    nextBuffer = [assetReaderOutput copyNextSampleBuffer];

    if(nextBuffer)
    {

       countsample = CMSampleBufferGetNumSamples(nextBuffer);
       NSLog(@"%i", countsample);
    }

}

Я заметил, что если я добавлю countsample, это будет равно количеству секунд в песне (при условии частоты дискретизации 44100 Гц). По этой причине я уверен, что чтение обрабатывается отлично. Однако я хотел бы выполнить различные DSP-фильтры для этих данных, но мне нужно сделать это для самой информации о примерах. Как я могу получить доступ к образцу данных? Также я заметил, что CMSampleBufferGetNumSamples всегда возвращал 8192 кроме конца песни. Есть ли способ увеличить / уменьшить эту скорость чтения? Спасибо

1 Ответ

3 голосов
/ 29 сентября 2011

Добавить данные к объекту NSMutableData.

NSMutabelData *samples = [NSMutabelData data];
while(countsample)
{
    nextBuffer = [assetReaderOutput copyNextSampleBuffer];
    if(nextBuffer)
    {
       countsample = CMSampleBufferGetNumSamples(nextBuffer);
       [samples appendBytes:nextBuffer length:countsample];
    }
}
Предполагается, что

countsample и nextBuffer уже существуют в вашем коде.

...