使用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个样本的错误有关!