4

よく調べて答えはノーのようですが、あきらめる前にここで聞いてみようと思いました。録音を含む私が取り組んでいるプロジェクトの場合、ルートが外部マイク+スピーカーの場合と、ヘッドフォンマイク+ヘッドフォンの場合の両方で、入力レベルは少し静かに聞こえます。コアオーディオの任意の部分でiPhoneのマイクゲインレベルをプログラムで変更できるかどうかを明確に知っている人はいますか?

そうでない場合、私が実際には「スピーカーフォン」モードではなく(少なくとも外部マイクを使用している)、自分がそうだと思っているだけである可能性はありますか?これが私のオーディオセッションの初期化コードです:

OSStatus error = AudioSessionInitialize(NULL, NULL, audioQueueHelperInterruptionListener, r);

[...some error checking of the OSStatus...]

UInt32 category = kAudioSessionCategory_PlayAndRecord; // need to play out the speaker at full volume too so it is necessary to change default route below
error = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category), &category);
if (error) printf("couldn't set audio category!");

UInt32 doChangeDefaultRoute = 1;
error = AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof (doChangeDefaultRoute), &doChangeDefaultRoute);
if (error) printf("couldn't change default route!");

error = AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, audioQueueHelperPropListener, r);
if (error) printf("ERROR ADDING AUDIO SESSION PROP LISTENER! %d\n", (int)error);

UInt32 inputAvailable = 0;
UInt32 size = sizeof(inputAvailable);

error = AudioSessionGetProperty(kAudioSessionProperty_AudioInputAvailable, &size, &inputAvailable);
if (error) printf("ERROR GETTING INPUT AVAILABILITY! %d\n", (int)error);

error = AudioSessionAddPropertyListener(kAudioSessionProperty_AudioInputAvailable, audioQueueHelperPropListener, r);
if (error) printf("ERROR ADDING AUDIO SESSION PROP LISTENER! %d\n", (int)error);

error = AudioSessionSetActive(true); 
if (error) printf("AudioSessionSetActive (true) failed");

ポインタをありがとうございました。

4

4 に答える 4

4

ゲインはAudioUnitのプロパティです。

試したことはありませんが、 AudioUnitSetPropertyを実行して、次のプロパティキーを使用して「自動ゲイン制御」またはAGCを簡単にオフにできるはずです: kAUVoiceIOProperty_VoiceProcessingEnableAGC

も参照してくださいkAUVoiceIOProperty_BypassVoiceProcessing

于 2010-05-28T19:29:31.440 に答える
1

ゲイン制御は自動で、平均は常に「最適」と見なされるレベルになります。入力をミキサーに通して音量を制御することもできますが、おそらくクリップするでしょう。

これは、iPhoneのcoreAudioから始めるのにかなり良い場所です

http://www.subfurther.com/blog/?p=507

于 2010-05-28T19:23:30.767 に答える
0

iOS 5.0以降では、AudioSessionモードをkAudioSessionMode_Measurementに設定できるようになりました。

kAudioSessionMode_Measurement

入力および/または出力オーディオ信号に対するシステム提供の信号処理の影響を最小限に抑えたいアプリケーションに適しています。

次のように、CoreAudioでAudioSessionモードを設定できます。

UInt32 mode = kAudioSessionMode_Measurement;
AudioSessionSetProperty(kAudioSessionProperty_Mode, sizeof(mode), &mode)
于 2013-03-29T16:11:23.687 に答える
0

iOS 5以降、グローバルアナログ入力ゲイン設定は次のように設定できます。

UInt32 uInt32Size = sizeof(UInt32);
UInt32 isGainAvaiable = 0;
OSStatus status = AudioSessionGetProperty(kAudioSessionProperty_InputGainAvailable, &uInt32Size, &isGainAvaiable);
if (isGainAvaiable)
{
    Float32 gainFloat = 0.142857f; //for example...
    status = AudioSessionSetProperty(kAudioSessionProperty_InputGainScalar, sizeof(gainFloat), &gainFloat);
}
于 2014-06-12T19:39:02.057 に答える