4

私は iOS 用の VOIP プロジェクトに取り組んでおり、奇妙な問題に気付きました。私のセットアップは以下のようになります:

  1. キャプチャ エンドには VoiceProcessingIO ユニット (エコー キャンセル用) があり、出力スコープ、出力バスと入力スコープ、入力バスの両方が有効になっています。
  2. レンダリング エンドには、出力スコープと出力バスが有効な RemoteIO ユニットがあります。

これまでのところ、オーディオグラフは使用していません。

音声の録音を開始すると、VoiceProcessingIO の出力バスである出力スコープをオフにするまで、上記のセットアップによって出力音声が非常に低くなることがわかりました。私のコードのバグ (誤った IO バスの設定) のように思えますが、キャプチャ エンドの変更がレンダー エンドに影響する理由はまだわかりません。

developer.apple.com から iOS 用オーディオ ユニット ホスティング ガイドを読んだ後、各設計パターンに I/O オーディオ ユニットを 1 つだけ含める必要があると何度も言及されていることに気付きました。これが必須なのか、それとも単なるオプションなのか疑問に思っています。コードを 2 つの Audio Unit で保持しても安全ですか?

実際、2 つのオーディオ ユニットを使用することには、それ自体の理由があるかもしれません。一方の端をミュートしたい場合は、1 つのユニットをオフにするだけでよいからです。これは、AudioUnitInitialize() の後に変更できないため、kAudioUnitProperty_EnableIO では実行できません。つまり、1 つのオーディオ ユニット ソリューションでは、両方のチャンネルをオフにして、オーディオ ユニットを再度初期化する必要がある場合があります。これにより、この瞬間に音声が一時停止する可能性があるため、ユーザー エクスペリエンスが低下します。

ありがとう、福州

4

3 に答える 3

1

ええと、私はコーナーの質問をしているようです。とにかく、これまでの実験に基づいていくつかのアイデアがあると思います。

  1. 私は 2 つの RemoteIO ユニットを使用しています... ローカル エンドでは問題ないように見えますが、リモート エンドでは問題が発生します。VOIP アプリの開発に取り組んでいたことを覚えていますか? レンダリング エンドを使用してラウドスピーカーを使用している場合、キャプチャ エンドが非常に小さい音量しかリモート エンドに渡せないことがわかりました。

  2. 2 つの VoiceProcessingIO ユニットを使用すると... 2 つのオーディオ ユニット オブジェクトを作成できるように見えますが、実際には同じものです。私のコードでは、2 つのユニットを作成し、そのうちの 1 つを閉じると (マイクのミュートなど)、もう 1 つのユニットも機能しなくなります。

  3. 1 つの VoiceProcessingIO ユニットと 1 つの RemoteIO ユニットを使用すると... それはより複雑です。まず、VoiceProcessingIO ユニットをレンダリング エンドのみとして使用しないでください。エコー キャンセルはトリガーされません。したがって、唯一の選択肢は、VoiceProcessingIO ユニットをキャプチャとして使用し、RemoteIO をレンダリングとして使用することです。うまくいくかもしれませんが、注意してください。たまたま VoiceProcessingIO ユニットの入力側と出力側の両方を有効にした場合、自分のスピーカーまたはラウドスピーカーから出力される音量がさらに小さくなることがあります。

ところで、すべてのディスカッションは iOS のみを対象としています。Macで遊ぶ機会がありませんでした。

はい、実際にそうする場合、保証された動作はないように見えます。最後の望みは、Apple の Audio Unit Hosting Guide に従うことです。

ここであなたの意見を持っている人がもっと増えることをまだ期待しています. 何か新しいことを見つけたら教えてください。

于 2012-05-31T04:48:30.097 に答える
0

AUGraph のエラーコードがあります

kAUGraphErr_OutputNodeErr AUGraph には 1 つの OutputUnit のみを含めることができます。このエラーは、2 番目の出力ユニットを追加しようとした場合、またはグラフの実行中にグラフの出力ユニットが削除された場合に返されます

AUGraph.h、106行目

于 2013-08-09T09:19:20.947 に答える
0

さて、私はあなたと同じ問題に遭遇したようです。また、アプリに2つのオーディオユニットを使用し、記録用にIOを処理し、再生用にリモートを使用していますが、出力ボリュームが低下していることがわかりました。

あなたのヒントから:「VoiceProcessingIO ユニットの入力端と出力端の両方を有効にした場合、自分のスピーカーまたはラウドスピーカーからより低い音量の出力が聞こえる場合があります。」、今、私は次のようにプロセス IO の出力を無効にしようとしています:

flag = 0;
status = AudioUnitSetProperty(_recordAudioUnit,
                              kAudioOutputUnitProperty_EnableIO,
                              kAudioUnitScope_Output,
                              kOutputBus,
                              &flag,
                              sizeof(flag));

はい、最後にレンダリングの音量を上げましたが、別の問題が発生しました。これは、記録が再び機能しないことです。

あなたがそのような問題を抱えているかどうかもわかりませんので、あなたのアップデートをすぐに見てみたいです.

于 2012-12-26T03:36:25.363 に答える