remoteIO回调函数给出了不稳定的缓冲区列表

时间:2012-01-04 11:13:11

标签: objective-c xcode core-audio

每次调用音频单元的回调函数时,我都会得到另一些奇怪的样本,因为NSLog(@"%ld",inNumberFrames);总是给我512个。

当我这样做时:

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++)
    {
         ....

任何帮助都可以节省我的时间! 谢谢。

1 个答案:

答案 0 :(得分:0)

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