核心音频:奇异问题使用渲染回调
问题描述:
我实现使用RemoteIO音频单元的音频直通,由渲染回调附接到所述输出总线(即,扬声器)的输入范围直通。核心音频:奇异问题使用渲染回调
一切工作顺顺当当,...
OSStatus RenderTone(
void * inRefCon,
AudioUnitRenderActionFlags * ioActionFlags,
const AudioTimeStamp * inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList * ioData)
{
SoundEngine * soundEngine = (SoundEngine *) inRefCon;
// grab data from the MIC (ie fill up ioData)
AudioUnit thisUnit = soundEngine->remoteIOUnit->audioUnit;
OSStatus err = AudioUnitRender(thisUnit,
ioActionFlags,
inTimeStamp,
1,
inNumberFrames,
ioData);
if (result)
{
printf("Error pulling mic data");
}
assert(ioData->mNumberBuffers > 0);
// only need the first buffer
const int channel = 0;
Float32 * buff = (Float32 *) ioData->mBuffers[channel].mData;
}
,直到我补充一点,最后一行。
Float32 * buff = (Float32 *) ioData->mBuffers[channel].mData;
有了这条线,没有错误,只是沉默。没有它,我可以在麦克风前点击我的手指,并在耳机中听到它。
编辑: AudioBuffer BUF0 = ioData-> mBuffers [0]; //足以导致失败
这是怎么回事?
这是不引起由编译器优化了一个未使用的变量的误差。如果我设置了buff ++;在下一行,行为是一样的。尽管编译器可能仍然可以检测到该变量实际上未被使用。
答
问题是用于从麦克风是失败的第一次这个回调火灾数据的请求。
什么我应该做的事情是检查返回值,并返回它(即退出回调),如果它是不是成功
了可能发生的事情是,我访问无效数据
它仍然相当怪异,但不需要进入它。
AudioBuffer buf0 = ioData-> mBuffers [0]; //足以导致失败 – 2010-11-11 05:56:06