4

经过大量搜索,答案似乎是否定的,但我想在放弃之前我会在这里问。对于我正在处理的一个包括录制声音的项目,当路由是外部麦克风 + 扬声器和耳机麦克风 + 耳机时,输入电平听起来有点安静。有谁确切地知道是否可以在 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");

非常感谢您的任何指点。

4

4 回答 4

4

增益是音频单元的属性。

我还没有尝试过,但是您应该可以使用此属性键执行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 开始,您可以按如下方式设置全局模拟输入增益设置

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 回答
0

对于 iOS 5.0 及更高版本,您现在可以将 AudioSession 模式设置为 kAudioSessionMode_Measurement。

kAudioSessionMode_Measurement

适用于希望将系统提供的信号处理对输入和/或输出音频信号的影响降至最低的应用。

您可以像这样在 Core Audio 中设置 AudioSession 模式:

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