ios - 在iOS上访问麦克风

标签 ios audio avfoundation microphone

我只需要知道用户何时开始对着麦克风讲话。我不会进行任何语音处理或任何花哨的操作,只需检测麦克风何时拾起任何东西即可。我已经找了一个小时,找不到这么简单的东西。有人可以指出我正确的方向吗?

更新1

对于这有多晚,我深表歉意。我一直遇到连接问题。这是我一直在使用的代码:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    let audioEngine = AVAudioEngine()
    let inputNode = audioEngine.inputNode
    let bus = 0
    inputNode.installTapOnBus(bus, bufferSize: 8192, format:inputNode.inputFormatForBus(bus)) {
        (buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in
        println("Speech detected.")
    }

    audioEngine.prepare()
    audioEngine.startAndReturnError(nil)

}

最佳答案

您传递给installTapOnBus的回调将与来自麦克风的每个音频块一起调用。上面的代码检测到您的应用已开始监听-静音或其他任何声音-而不是是否有人在对着麦克风讲话。

为了真正识别语音的开始,您需要查看缓冲区中的数据。

一个简单的版本类似于在PA系统中使用的音频噪声门:选择一个振幅阈值和一个持续时间阈值,一旦两者都满足,就将其称为语音。由于电话,麦克风和环境各不相同,您可能需要自适应确定振幅阈值才能获得良好的性能。

即使具有自适应阈值,持续的响亮声音仍将被视为“语音”。如果您也需要清除这些杂音,则需要查看某种频率分析(例如FFT),并确定语音频率随时间的足够幅度和变化。或者,您可以将缓冲区传递给语音识别引擎(例如SFSpeechRecognizer),然后查看其是否能够识别任何内容,从而背负Apple的信号处理工作。但是,如果您经常这样做,那将是非常沉重的。

关于ios - 在iOS上访问麦克风,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28895370/

相关文章:

ios - AVPlayer 和 MPMoviePlayerController 的区别

ios - Swift – self.navigationController 在过渡后变为 nil

ios - 如何让 IOS 每次都询问用户是否要允许应用程序使用他们的位置?

winforms - 创建适用于 Windows 的音频图形均衡器

Android 使用自定义编码器录制音频

html - Videogular不支持flac音频文件

iphone - 在 AVFoundation 中捕获缩放的预览 View

ios - 使用 PHP 在 Objective-C 中上传录制的音频文件

ios - 更改自定义 UINavigationBar 属性不能完全快速工作

ios - UIScrollView 缩放但 subview 保持不变