私は iOS 用の VOIP プロジェクトに取り組んでおり、奇妙な問題に気付きました。私のセットアップは以下のようになります:
- キャプチャ エンドには VoiceProcessingIO ユニット (エコー キャンセル用) があり、出力スコープ、出力バスと入力スコープ、入力バスの両方が有効になっています。
- レンダリング エンドには、出力スコープと出力バスが有効な RemoteIO ユニットがあります。
これまでのところ、オーディオグラフは使用していません。
音声の録音を開始すると、VoiceProcessingIO の出力バスである出力スコープをオフにするまで、上記のセットアップによって出力音声が非常に低くなることがわかりました。私のコードのバグ (誤った IO バスの設定) のように思えますが、キャプチャ エンドの変更がレンダー エンドに影響する理由はまだわかりません。
developer.apple.com から iOS 用オーディオ ユニット ホスティング ガイドを読んだ後、各設計パターンに I/O オーディオ ユニットを 1 つだけ含める必要があると何度も言及されていることに気付きました。これが必須なのか、それとも単なるオプションなのか疑問に思っています。コードを 2 つの Audio Unit で保持しても安全ですか?
実際、2 つのオーディオ ユニットを使用することには、それ自体の理由があるかもしれません。一方の端をミュートしたい場合は、1 つのユニットをオフにするだけでよいからです。これは、AudioUnitInitialize() の後に変更できないため、kAudioUnitProperty_EnableIO では実行できません。つまり、1 つのオーディオ ユニット ソリューションでは、両方のチャンネルをオフにして、オーディオ ユニットを再度初期化する必要がある場合があります。これにより、この瞬間に音声が一時停止する可能性があるため、ユーザー エクスペリエンスが低下します。
ありがとう、福州