iPhone上的核心音频-有没有办法更改麦克风增益(扬声器麦克风或耳机麦克风)?

iPhone上的核心音频-有没有办法更改麦克风增益(扬声器麦克风或耳机麦克风)?,iphone,cocoa-touch,core-audio,microphone,audioqueueservices,Iphone,Cocoa Touch,Core Audio,Microphone,Audioqueueservices,经过多次搜索,答案似乎是否定的,但我想在放弃之前我会在这里问一下。对于我正在进行的一个包括录音的项目,无论是外部麦克风+扬声器还是耳机麦克风+耳机,输入电平听起来都有点安静。是否有人确切地知道是否有可能通过编程改变iPhone核心音频任何部分的麦克风增益水平 若并没有,是否有可能我并没有真正处于“扬声器”模式(至少有外部麦克风),而只是认为我是?这是我的音频会话初始化代码: OSStatus error = AudioSessionInitialize(NULL, NULL, audioQueu

经过多次搜索,答案似乎是否定的,但我想在放弃之前我会在这里问一下。对于我正在进行的一个包括录音的项目,无论是外部麦克风+扬声器还是耳机麦克风+耳机,输入电平听起来都有点安静。是否有人确切地知道是否有可能通过编程改变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");

非常感谢您的指点。

增益控制是自动的,平均值总是被认为是“最佳”的水平。你可以通过一个混音器来控制音量,但我认为它可能会被剪辑

这是一个很好的开始在iphone上使用coreAudio的地方


增益是音频单元的一个属性

我还没有尝试过,但您应该能够使用此属性键执行并关闭“自动增益控制”或AGC:


另请参见iOS 5.0及更高版本的语音处理,您现在可以将AudioSession模式设置为kAudioSessionMode

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

您可以在Core Audio中设置AudioSession模式,如下所示:

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

从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);
}

有意思,你能给我指一下关于通过混合器路由的文档/示例代码吗?谢谢-我在搜索中看到了这篇博文,但我更感兴趣的是关于gain/AGC的特定示例或文档。嗯,正如我所说。。没有办法操纵麦克风增益。但是,您可以在播放或录制之前通过将remoteIO音频单元连接到曲线图中的混音器音频单元来操纵信号的音量,如链接中所述。明白了,我以为你说的是一种使用混音器影响增益水平的方法——在采集后推动音量可能对这个应用程序不好,因为我希望提高s/n而不是更响亮的播放,但我很感谢你的建议。好的,具体来说,KauvoiceOproperty\u VoiceProcessingEnableAGC仅适用于语音处理I/O音频单元,但这可能是我的一个选项,谢谢。接下来,任何音频单元或音频会话设置中都没有增益控制。但是,某些音频单元预设会为语音应用带来更多的感知增益,或更多的信号和更少的噪声。这不会提供增益控制,尽管它会关闭AGC。可能会复制