4

私はVoiceChatモードを使用するたびに自分のアプリでオーディオが低すぎるという問題を抱えていたので、ばかチェックとして、オーディオユニットプログラミング用のAppleのサンプルコード(SpeakHere)をダウンロードし、そのアプリにVoiceChatモードを追加しました。結局のところ、問題はそこでも発生します。そのモードで実行すると、すべてが目的のボリュームの約20%になります。

PlayAndRecordカテゴリが設定された直後に、SpeakHereController.mmの267行目にこのコードを追加しました。

    // set mode -- this results in audio being too soft
    UInt32 mode = kAudioSessionMode_VoiceChat;

    error = AudioSessionSetProperty(kAudioSessionProperty_Mode, sizeof(mode), &mode);
    if (error) printf("couldn't set audio session mode!");

スピーカーフォンを使用するためのエコーキャンセレーションを取得するために、RemoteIOでVoiceChatモードを使用しています。VoiceProcessingIOは(一種の)動作しますが、古いiPhone(3GS)のパフォーマンスは非常に悪く、使用できません。そのため、代わりにRemoteIOを使用しています。スピーカーのルートが正しいことを確認しました。測定モードを設定して手動でゲインを上げてみましたが、改善が見られません。

AudioSessionモードを使用するときに大音量のドロップオフを防ぐための提案はありますか?

4

1 に答える 1

1

VoiceChat モードがゲイン、エコー キャンセルなどの最適な設定を決定するために設定されている場合、/current/ オーディオ ルートが使用されることが判明しました。つまり、特定のルートを設定する場合は、それを行う必要があります。モードを設定する前 - 後ではありません。

この順序でそれを行うと、ボリュームの問題が修正されました。

  • PlayAndRecord を設定する
  • スピーカーへのルートを設定
  • モードを設定する
  • オーディオ ユニットで VoiceProcessingIO を使用する
  • 3GS などの古いデバイスで良好なパフォーマンスを維持するために、ハードウェアのサンプル レートを低く (8k) 維持します。
于 2012-12-26T19:52:50.637 に答える