如何更改 AVAudioSession 的输入增益?代码

Posted

技术标签:

【中文标题】如何更改 AVAudioSession 的输入增益?代码【英文标题】:How to change the input gain for AVAudioSession? xcode 【发布时间】:2012-12-10 10:37:03 【问题描述】:

在使用 AVFoundations 框架中的 AVAudiosession 和 AVAudioRecorder 录制时,我在尝试调整输入增益时遇到了一些问题。我找到了 setInputGain 方法,它接受一个浮点数 [0.0, 1.0],到目前为止,它看起来像这样:

在我看来DidLoad:

    //Initialise the AVAudioSession, and share between different functions
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
    [audioSession setActive:YES error:nil];
    [audioSession setInputGain:1.0 error:nil];

但是,setInputGain 方法只会在当前录制的内容之上为您提供额外的增益,因此将其设置为 0.0 不会使其静音,但将其设置为 1.0 会使输入更响亮。我在 AudioSession 类中找到了一个名为 kAudioSessionProperty_InputGainScalar 的属性,但似乎无法将值写入其中。我需要一点帮助。

这是录音功能,后面有教程:

    //Creating a temporary place to record
    tempRecFile = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:@"sound.caf"]];
    recorder = [[AVAudioRecorder alloc] initWithURL:tempRecFile
                                           settings:nil
                                              error:nil];
    [recorder setDelegate:self];
    //Setting the input gain for the recording, then proceed to record
    //[audioSession setInputGain:inputGainSlider.value error:nil];
    [recorder prepareToRecord];
    [recorder record];
    [self.inputGainSlider setEnabled:NO];

【问题讨论】:

【参考方案1】:

我测试过的所有设备都不允许设置输入增益。我还没有找到苹果的官方设备列表......这是我尝试过的设备: iphone 4s iphone 6s ipad专业版

【讨论】:

【参考方案2】:

从官方文档,我看到以下几行,

讨论

在调用此方法之前,您应该检查 inputGainSettable 属性中的值,以确保当前输入的输入增益级别是可设置的。

那么有没有可能设备不支持更改它?

【讨论】:

以上是关于如何更改 AVAudioSession 的输入增益?代码的主要内容,如果未能解决你的问题,请参考以下文章

AVAudioSession 输出选择

在 OSX 中以编程方式更改麦克风增益

禁用 AVAudioSession 后 Unity 声音不起作用

AVAudioSession无法识别来自蓝牙设备的音频

带有路由变化的 AVAudioSession 红色状态栏

放大器增益的测量