0

我正在修改 Apple 开发人员网站上的 AurioTouch2 示例中的代码。目前我正在尝试完全了解该应用程序的功能。我看到应用程序在静音打开时使用静音数据方法将 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);
}

AurioTouch2 示例代码

4

2 回答 2

0

你是对的,所做的就是将缓冲区归零。这很重要的原因是,mData成员可能未初始化(即随机),如果不理会它会导致可怕的嗡嗡声。它可能没有任何区别,但你不应该真的把它留给机会。

如果您曾经处于想要产生静音的情况,请确保您的缓冲区为 0(而不是仅仅离开它)。

于 2012-12-04T22:11:55.327 回答
0

首先,我发现静音按钮确实有效。当我将手机举到耳边时,我可以听到麦克风的声音正在通过接收器播放。关闭静音没有声音。以前,我期待扬声器(而不是接收器)发出声音。那部分问题解决了。

其次,远程 io 单元将麦克风输入数据放入 ioData 缓冲区。在我期待扬声器的输出会有另一个回调之前,但我认为因为没有一个远程 io 单元只是使用相同的 ioData 并将其播放到接收器(扬声器)。因此,将 ioData 清零(在处理麦克风输入数据以供应用程序使用之后)会导致接收方静音(即静音功能)。任何确认或澄清表示赞赏。

于 2012-12-04T22:58:11.970 回答