获取AVAssetReader的示例数据

时间:2011-09-28 23:32:28

标签: iphone objective-c ios audio core-audio

我正在尝试从MP3获取PCM数据。我正在使用AVAssetReaderOutput,似乎可以很好地阅读数据。

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

    if(nextBuffer)
    {

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

}

我注意到,如果我加起来countsample,它相当于歌曲中的秒数(假设采样率为44100hz)。出于这个原因,我确信阅读得到了完美的处理。但是,我想做的是对这些数据执行各种DSP过滤器,但我需要对样本信息本身进行操作。如何访问示例数据?此外,我注意到CMSampleBufferGetNumSamples总是返回8192,但歌曲结尾处除外。有没有办法增加/减少这个读取率? 谢谢

1 个答案:

答案 0 :(得分:3)

将数据附加到NSMutableData对象。

NSMutabelData *samples = [NSMutabelData data];
while(countsample)
{
    nextBuffer = [assetReaderOutput copyNextSampleBuffer];
    if(nextBuffer)
    {
       countsample = CMSampleBufferGetNumSamples(nextBuffer);
       [samples appendBytes:nextBuffer length:countsample];
    }
}
假设{p> countsamplenextBuffer已存在于您的代码中。