经过多次搜索,答案似乎不是,但我想在放弃之前我会问这里。对于我正在研究的项目,包括录制声音,当路线是外置麦克风+扬声器和耳机麦克风+耳机时,输入电平听起来有点安静。有没有人明确知道是否可以在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 :(得分:3)
增益是音频单元的属性。
我没有尝试过,但您应该可以使用此属性键执行AudioUnitSetProperty并关闭“自动增益控制”或简称AGC:kAUVoiceIOProperty_VoiceProcessingEnableAGC
另见kAUVoiceIOProperty_BypassVoiceProcessing
答案 1 :(得分:1)
增益控制是自动的,平均值始终是被认为是“最佳”的水平。您可以通过调音台路由输入以控制音量,但我认为它可能会剪辑。
这是从iphone上的coreAudio开始的一个非常好的地方
答案 2 :(得分:0)
对于iOS 5.0及更高版本,您现在可以将AudioSession模式设置为kAudioSessionMode_Measurement。
kAudioSessionMode_Measurement
适用于希望最大限度地减少系统提供的输入和/或输出音频信号处理信号处理效果的应用。
您可以在Core Audio中设置AudioSession模式,如下所示:
UInt32 mode = kAudioSessionMode_Measurement;
AudioSessionSetProperty(kAudioSessionProperty_Mode, sizeof(mode), &mode)
答案 3 :(得分: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);
}