Получение образца данных AVAssetReader

#iphone #objective-c #ios #audio #core-audio

#iPhone #objective-c #iOS #Аудио #ядро-аудио

Вопрос:

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

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

    if(nextBuffer)
    {

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

}
  

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

Ответ №1:

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

 NSMutabelData *samples = [NSMutabelData data];
while(countsample)
{
    nextBuffer = [assetReaderOutput copyNextSampleBuffer];
    if(nextBuffer)
    {
       countsample = CMSampleBufferGetNumSamples(nextBuffer);
       [samples appendBytes:nextBuffer length:countsample];
    }
}
  

countsample и nextBuffer предполагается, что они уже существуют в вашем коде.