0

開発者サイトの AurioTouch2 の例から Apple のコードを変更しています。現在、アプリの機能を完全に理解しようとしています。ミュートがオンの場合、アプリケーションは、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);
}

AurioTouch2 サンプル コード

4

2 に答える 2

0

まず、ミュート ボタンが機能することがわかりました。電話を耳に当てると、マイクからの音がレシーバーに再生されているのが聞こえます。ミュートオフで音が出ません。以前は、(レシーバーではなく)スピーカーからの音を期待していました。問題のその部分は解決しました。

次に、リモート io ユニットがマイク入力データを ioData バッファーに入れます。以前は、スピーカーへの出力用に別のコールバックがあると予想していましたが、リモート io ユニットが同じ ioData を使用してレシーバー (スピーカー) で再生するコールバックがないためだと思います。したがって、ioData をゼロにする (アプリで使用するためにマイク入力データを処理した後) と、レシーバーが無音になります (つまり、ミュート機能)。確認または説明をいただければ幸いです。

于 2012-12-04T22:58:11.970 に答える
0

あなたは正しいです、それはバッファをゼロにすることだけです。これが重要な理由は、mDataメンバーが初期化されていない (つまり、ランダムである) 可能性があるためです。メンバーを放置すると、非常に大きなブーンというノイズが発生します。違いがない可能性もありますが、それを偶然に任せるべきではありません。

沈黙を作りたい状況に陥ったことがある場合は、バッファーをそのままにするのではなく、必ずバッファーを 0 にしてください。

于 2012-12-04T22:11:55.327 に答える