使用RemoteIO会给出不合理的缓冲区值和大小

时间:2012-12-26 14:36:18

标签: objective-c ios macos cocoa

使用iphone上的回调功能,我正在尝试获取麦克风输入信号。 经过这么多问题我发现了这个: 当我向缓冲区输入一个纯正的sin波(到mac模拟器)时,我可以看到信号,但随后,它变得越来越低,直到零。

我在想这与苹果的bug有关,mac上缓冲区样本的数量是471而不是1024。我可以以某种方式解决这个错误???

这是我的回调:

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; //* sizeof(SInt16) ?
    buffer.mData = NULL; 

    AudioBufferList bufferList;
    bufferList.mNumberBuffers = 1;
    bufferList.mBuffers[0] = buffer;
    OSStatus status;
    status = AudioUnitRender(audioUnit,
                             ioActionFlags,
                             inTimeStamp,
                             inBusNumber,
                             inNumberFrames,
                             &bufferList);


    int16_t *q = (int16_t *)(&bufferList)->mBuffers[0].mData;


    //here i print q,which is good for 4 seconds-when i can see the pure sin, than it goes down to zero-while sin wave is still in the air

编辑:

这不是在设备上发生的,只在mac上发生! 我很确定它与mac在缓冲区中看到417个样本的错误有关!

0 个答案:

没有答案
相关问题