我正在开发人员网站上修改AurioTouch2示例中的Apple代码。目前我正在努力完全理解App的功能。我看到当静音打开时,应用程序使用silenceData方法将0写入缓冲区。但是,在我看来,数据已经处理完毕,并且在使用应用程序时,我看到没有差异,打开或关闭静音。我错过了什么 - 静音服务的目的是什么?
从performThu方法结束(输入回调)
if (THIS->mute == YES) { SilenceData(ioData); }
来自aurioHelper.ccp
void SilenceData(AudioBufferList *inData)
{
for (UInt32 i=0; i < inData->mNumberBuffers; i++)
memset(inData->mBuffers[i].mData, 0, inData->mBuffers[i].mDataByteSize);
}
答案 0 :(得分:0)
你是对的,所有这一切都是将缓冲区清零。重要的原因是,mData
成员可能未被初始化(即随机),如果单独留下则会产生可怕的嗡嗡声。它可能没有任何区别,但你不应该把它留给机会。
如果你曾经想要产生沉默,请确保你的缓冲区为0(而不是仅仅留下它)。
答案 1 :(得分:0)
首先,我发现静音按钮确实有效。当我把手机放到耳边时,我可以听到麦克风的声音正在播放到接收器。静音关闭没有声音。之前,我期待扬声器(不是接收器)的声音。那部分问题解决了。
其次,远程io单元将麦克风输入数据放入ioData缓冲区。在我期待扬声器的输出会有另一个回调之前,我认为因为没有一个远程io单元只使用相同的ioData并将其播放到接收器(扬声器)。因此,将ioData归零(在处理麦克风输入数据以供app使用之后)导致接收器静音(即静音功能)。任何确认或澄清都表示赞赏。