ios - 如何在 iPhone 上控制硬件麦克风输入增益/电平?

标签 ios core-audio remoteio

我的音频分析功能在 iPad (2) 上的响应比在 iPhone (4) 上的响应更好。它似乎对 iPad 上更柔和的声音很敏感,而 iPhone 需要更大声的输入才能正确响应。无论这是因为麦克风放置、不同的组件、不同的软件配置还是其他一些因素,我都希望能够在我的应用程序中对其进行控制。

显然,我可以将所有音频样本相乘,以编程方式应用增益。当然这也有软件成本,所以:

是否可以在 iOS 中通过软件控制麦克风的增益,类似于在 MacOS 中的控制方式?我找不到任何关于此的文档,但我希望我只是以某种方式错过了它。

最佳答案

在 ios6+ 上你可以使用 AVAudioSession 属性

        CGFloat gain = sender.value;
        NSError* error;
        self.audioSession = [AVAudioSession sharedInstance];
        if (self.audioSession.isInputGainSettable) {
            BOOL success = [self.audioSession setInputGain:gain 
                                                     error:&error];
               if (!success){} //error handling
        } else {
            NSLog(@"ios6 - cannot set input gain");
        }               

在 ios5 上,您可以使用 AudioSession 函数获取/设置音频输入增益属性

    UInt32 ui32propSize = sizeof(UInt32);
    UInt32 f32propSize = sizeof(Float32);
    UInt32 inputGainAvailable = 0;
    Float32 inputGain = sender.value;


    OSStatus err = 
        AudioSessionGetProperty(kAudioSessionProperty_InputGainAvailable
                            , &ui32propSize
                            , &inputGainAvailable);

    if (inputGainAvailable) {
    OSStatus err = 
        AudioSessionSetProperty(kAudioSessionProperty_InputGainScalar
                             , sizeof(inputGain)
                             , &inputGain);
    } else {
        NSLog(@"ios5 - cannot set input gain");
    }
    OSStatus err = 
        AudioSessionGetProperty(kAudioSessionProperty_InputGainScalar
                              , &f32propSize
                              , &inputGain);
    NSLog(@"inputGain: %0.2f",inputGain);

(省略错误处理)

由于您对控制输入增益感兴趣,您可能还想通过将 Audio Session 模式设置为 AVAudioSessionModeMeasurement (ios5+6) 来禁用自动增益控制

[self.audioSession setMode:AVAudioSessionModeMeasurement
                     error:nil];
NSLog(@"mode:%@",self.audioSession.mode);

这些设置非常特定于硬件,因此无法假定可用性。例如,我可以改变 iPhone3GS/ios6 和 iPhone4S/ios5.1 的增益,但不能改变 ipadMini/ios6.1。我可以在 iPhone3G 和 iPad mini 上关闭 AGC,但不能在 iPhone4S 上关闭。

关于ios - 如何在 iPhone 上控制硬件麦克风输入增益/电平?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10871231/

相关文章:

ios - 关闭模态视图后删除模态模糊效果

ios - 无法设置 NavigationItem 的 TintColor

iphone - 使用 AVAssetReader 和 ARC 绘制波形

ios - 核心音频 iOS : Retrieving the past & future timestamps for captured & to-be-rendered samples

iphone - 在 iPhone 5 上选择后置麦克风

ios - 检查特定用户名是否存在于 KeyChain 如果不存在则使用密码 ios objective-c 存储新用户

ios - swift - Twilio 视频聊天 - 卡住时发出警报

ios - 录制后更改音频比特率

ios - OpenAL 和音频单元冲突