【问题标题】:Adjusting Input Volume using AVFoundation (in an AVCaptureSession)使用 AVFoundation 调整输入音量(在 AVCaptureSession 中)
【发布时间】:2013-05-06 21:53:27
【问题描述】:

我到处寻找,但找不到调整 AVCaptureSession 输入设备输入音量的方法。我能做的最好的,这对我一点帮助都没有,是通过访问来自 AVCaptureAudioDataOutput 的连接(AVCaptureConnections)来获取设备的音频电平 - 即通过监视预览输出的电平。有没有办法改变输入增益,甚至直接在 AVFoundation 中获取音频输入电平?我还在学习一点,所以如果我遗漏了任何明显的东西,我深表歉意。

编辑:我应该注意这是针对 OSX 的。

【问题讨论】:

    标签: objective-c macos cocoa


    【解决方案1】:

    所以,我使用了一些他被链接的信息,以及对 Core Audio 的一些研究,并将其变成了一个 github 项目。这样,其他想要在使用 AVFoundation 时更改设备输入音量的人就不必重新发明轮子。你可以在这里找到课程:https://github.com/ewrobinson/ERVolumeAdjust

    【讨论】:

      【解决方案2】:

      您可以通过设置会话输出的音频连接的volume 属性来调整增益。
      考虑到连接可能有多个通道。

      我假设这里引用了 fileOutput ivar,我在将输出添加到会话之前存储了它。

      AVCaptureConnection* audioConnection = [fileOutput connectionWithMediaType:AVMediaTypeAudio];
      if(audioConnection)
      {
          for(AVCaptureAudioChannel* audioChannel in [audioConnection audioChannels])
          {
              audioChannel.volume = 0.5;
          }
      }
      

      【讨论】:

      • 不幸的是,我认为这只会影响预览输出,不会影响输入电平。我的目标是直接改变输入增益。
      • 嗯。你试过了吗?我在这里成功使用了它,不同之处在于我使用了 AVCaptureFileOutput 的实例而不是 AVCaptureAudioDataOutput。对我来说,这似乎是影响 Mac 信号增益的唯一选择。 OS X 缺少完整的 AVAudioSession 内容,但与 iOS 相比,它在 AVCaptureAudioChannel 上提供了音量属性。
      • 但这不只是让输出(对预览或文件)更响亮/更柔和而不考虑输入音量吗?我的印象是,如果一部分音频因声音太大而被剪辑,这将无济于事 - 它会降低保存文件的音量,但剪辑的音频会丢失(这就是我试图避免)。当然,我完全有可能误解了。
      【解决方案3】:
      self.audioSession = [AVAudioSession sharedInstance];
      if (self.audioSession.isInputGainSettable) {
          BOOL success = [self.audioSession setInputGain:sender.value error:&error];
          if (!success) NSLog(@"inputGain error: %@",error);
      }
      

      这是针对 ios6+ ... 针对 ios5,您可以使用 AudioSessionGetProperty / AudioSessionSetProperty 函数来实现。

      然而,并非所有硬件都能够调节输入增益。例如,我可以在带有内置麦克风的 iPhone 3GS/ios6 上设置增益,但在带有内置麦克风的 iPad mini 上无法设置增益。在 iPhone 3GS 上,增益在实际开始录制之前也无法设置。 (编辑:iPhone 4S/ios5 也可以通过内置麦克风设置增益)

      更新
      正如您所指出的,您正在寻找 OSX 解决方案,而不是 iOS。我已经移动了这个答案(更详细)to a better place

      对于 OSX,您可能会发现此问答很有用:

      How do you set the input level (gain) on the built-in input (OSX Core Audio / Audio Unit)?

      【讨论】:

      • 我没有提到这是针对 OSX 而不是 ios。对此感到抱歉。
      • @ewrobinson - 我已在您的问题中添加了 OSX 标签。我的努力没有白费,我找到了一个很合适的unanswered question,所以填写了更多详细信息并将其发布到那里。
      • 啊,我对这个网站有点陌生,所以我忘了把它标记为 OSX。谢谢。如果只有 OSX 具有一些 AVAudioSession 功能...您发布的使用 CoreAudio 更改默认输入设备上的输入增益的链接似乎已经开始了我需要的东西。我曾(错误地)假设这种能力在 OSX 的 AVFoundaiton 中是可用的(它似乎在 ios 中),但事实并非如此。看起来我的下一个任务是弄清楚 AVCaptureSession 正在使用哪个设备以及如何在 CoreAudio 中识别它。感谢您的帮助。
      猜你喜欢
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      相关资源
      最近更新 更多