remoteIO回拨功能是给不稳定的缓冲列表

问题描述:

音频单元的每一次回调函数被调用时,我得到的样品是陌生的另一个号码,因为NSLog(@"%ld",inNumberFrames);让我总是512remoteIO回拨功能是给不稳定的缓冲列表

当我这样做:

NSLog(@"%li",strlen((const char *)(&bufferList)->mBuffers[0].mData)); 

我得到的数字,如:50 20 19 160 200 1 ...

这很奇怪。每个回调函数都有 ,我必须得到满缓冲区的512个样本没有?

我知道我没有得到所有需要的样本,因为如果我输入一个罪2khz,我得到过零约600,如果我什么都不放,我等同样。

检索数据我做的:

static OSStatus recordingCallback(void *inRefCon, 
            AudioUnitRenderActionFlags *ioActionFlags, 
            const AudioTimeStamp *inTimeStamp, 
            UInt32 inBusNumber, 
            UInt32 inNumberFrames, 
            AudioBufferList *ioData) 
{ 


    AudioBuffer buffer; 

    buffer.mNumberChannels = 1; 
    buffer.mDataByteSize = inNumberFrames * 2; 
    //NSLog(@"%ld",inNumberFrames); 
    buffer.mData = malloc(inNumberFrames * 2); 

    // Put buffer in a AudioBufferList 
    AudioBufferList bufferList; 
    bufferList.mNumberBuffers = 1; 
    bufferList.mBuffers[0] = buffer; 



    OSStatus status; 
    status = AudioUnitRender(audioUnit, 
          ioActionFlags, 
          inTimeStamp, 
          inBusNumber, 
          inNumberFrames, 
          &bufferList); 
    //checkStatus(status); 
    NSLog(@"%li",strlen((const char *)(&bufferList)->mBuffers[0].mData)); 
    int16_t *q = (int16_t *)(&bufferList)->mBuffers[0].mData; 
    for(int i=0; i < strlen((const char *)(&bufferList)->mBuffers[0].mData); i++) 
    { 
     .... 

任何帮助,这会来救我的天! 谢谢。

+0

你为什么在缓冲区中使用'strlen'? – 2012-01-04 11:22:46

+0

所以我应该使用什么?你能帮我检索这一行的数据吗? – Curnelious 2012-01-04 12:22:32

+1

您的缓冲区是固定大小(inNumberFrames),因此只需进行相应的迭代即可。 – 2012-01-04 12:25:07

音频采样缓冲区的strlen()是而不是与样本数有关。相反,请查看作为回调函数参数给定的帧数。