3

После долгих поисков ответ кажется нет, но я думал, что попрошу здесь, прежде чем сдаться. Для проекта, над которым я работаю, включая звуковую запись, уровни ввода звучат немного тихо, когда маршрут - это внешний микрофон + динамик, а также наушники для наушников + наушники. Кто-нибудь знает окончательно, можно ли программно изменить уровни усиления микрофона на iPhone в любой части Core Audio?Core Audio на 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"); 

Большое спасибо за любые указатели.

+0

Возможный дубликат [Как для контроля усиления/усиления аппаратного микрофонного входа на iPhone?] (http://stackoverflow.com/questions/10871231/how-to-control-hardware-mic-input-gain-level-on-iphone) – buildsucceeded

ответ

1

Контроль усиления является автоматическим, среднее значение всегда будет считаться «оптимальным». Вы можете направить вход через микшер, чтобы контролировать громкость, но я думаю, что это, вероятно, будет клип.

Это очень хорошее место, чтобы начать с CoreAudio на Iphone

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

+0

Интересно, могли бы вы указать мне на документацию/образец кода о маршрутизации через микшер? – Halle

+0

Спасибо - я видел это сообщение в блоге в моих поисках, но меня больше интересует конкретный пример или документ, касающийся усиления/AGC. – Halle

+0

Ну, как я сказал .. нет никакого способа манипулировать усилением микрофона. Но вы можете манипулировать громкостью сигнала перед воспроизведением или записью, подключив аудиоустройство RemoteIO к аудиоустройству микшера в AUGraph, как описано в ссылке. – hooleyhoop

3

Gain является собственностью Audio Unit.

Я не пробовал, но вы должны быть в состоянии сделать AudioUnitSetProperty и выключить «Автоматическую регулировку усиления» или AGC для краткости этого ключ собственности: kAUVoiceIOProperty_VoiceProcessingEnableAGC

Смотрите также kAUVoiceIOProperty_BypassVoiceProcessing

+1

ОК, чтобы быть конкретным kAUVoiceIOProperty_VoiceProcessingEnableAGC применим только к аудиоустройству ввода-вывода для обработки голоса, но это может быть для меня вариант, спасибо. – Halle

+0

Просто для того, чтобы следить за этим, в любом аудиоустройстве или настройках аудиосообщения отсутствует контроль усиления.Но некоторые из предустановок звукового блока приводят к более восприимчивому усилению или большему количеству сигналов и меньшего шума для голосовых приложений. – Halle

0

Для прошивки 5.0 и более поздних версий теперь вы можете настроить режим AudioSession на kAudioSessionMode_Measurement.

kAudioSessionMode_Measurement 

Подходит для приложений, которые хотели бы свести к минимуму влияние обработки сигналов системы, поставляемые для ввода и/или вывода звуковых сигналов.

Вы можете установить режим AudioSession в Core Audio, как это:

UInt32 mode = kAudioSessionMode_Measurement; 
AudioSessionSetProperty(kAudioSessionProperty_Mode, sizeof(mode), &mode) 
+0

Это не обеспечивает контроль усиления, хотя он отключает AGC. – Halle

0

С прошивкой 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); 
}