VoiceActivityDetector 0.2.0

VoiceActivityDetector 0.2.0

HANAI Tohru 维护。



  • 作者
  • reedom

基于 WebRTC 的语音活动检测

CI Status Version License Platform

这是 WebRTC 语音活动检测器 (VAD) 的 Swift/Objective-C 接口。

语音活动检测器会将音频数据分类为语音或非语音。这在电话和语音识别中可能很有用。

据报道,Google 为 WebRTC 项目开发的 VAD 是最好的之一,它速度快、现代化、免费。

示例数据格式

VAD 引擎只与带符号 16 位,单通道 PCM 一起工作。

支持的比特率有

  • 8000Hz
  • 16000Hz
  • 32000Hz
  • 48000Hz

注意,内部所有处理都将以 8000Hz 完成。高采样率的输入数据将先降采样。

使用方法

import VoiceActivityDetector

let voiceActivityDetector = VoiceActivityDetector(sampleRate: 8000,
                                                  agressiveness: .veryAggressive)

func didReceiveSampleBuffer(_ sampleBuffer: CMSampleBuffer) {
  // activities: [VoiceActivityDetector.VoiceActivityInfo]?
  let activities = voiceActivityDetector(sampleBuffer: sampleBuffer, byEachMilliSec: 10)!

  // ...
}

有关与麦克风的用法,请参阅 示例。有关对音频文件的用法,请参阅 测试代码

API

构造函数

init?()
convenience init?(sampleRate: Int = 8000, agressiveness: DetectionAgressiveness = .quality)
convenience init?(agressiveness: DetectionAgressiveness = .quality) {

实例化和VoiceActivityDetector。

属性

var agressiveness: DetectionAgressiveness

VAD的操作“侵略性”模式。

  • .quality默认值;正常语音检测模式。适合高比特率、低噪声数据。也可能将噪声分类为语音。
  • .lowBitRate针对低比特率音频优化的检测模式。
  • .aggressive非常适合有一定噪声、较低质量音频的检测模式。
  • .veryAggressive具有最低误报率的检测模式。适用于大多数输入。
var sampleRate: Int

VAD操作的Hz采样率。
有效值是8000、16000、32000和48000。默认值是8000。

注意,内部所有处理都将以 8000Hz 完成。高采样率的输入数据将先降采样。

函数

func reset()

重新初始化一个VAD实例,清除所有状态,并将模式和采样率重置为默认值。

func detect(frames: UnsafePointer<Int16>, count: Int) -> VoiceActivity

计算音频持续时间内的VAD决定。

frames是一个有符号16位样本数组的值。
count指定帧数。由于内部处理器支持10、20或30毫秒的计数,例如在8 kHz下,count必须是80、160或240。

返回一个VAD决定。

在内部,VAD引擎从信号数据流中计算80-4KHz之间六个频带的能量功率,并在输入持续时间中猜测语音活动状态的几率。因此,其决定应该比单次或周期性检测更准确。

func detect(frames: UnsafePointer<Int16>, lengthInMilliSec ms: Int) -> VoiceActivity

ms指定处理持续时间(以毫秒为单位)。
应为10、20或30(毫秒)。

  public func detect(sampleBuffer: CMSampleBuffer,
                     byEachMilliSec ms: Int,
                     offset: Int = 0,
                     duration: Int? = nil) -> [VoiceActivityInfo]? {

在样本缓冲区中计算VAD决定。

sampleBuffer是要检查的音频缓冲区。
ms指定处理持续时间(以毫秒为单位)。
offset控制从哪里开始VAD的偏移时间(以毫秒为单位)。
duration控制总VAD持续时间(以毫秒为单位)。

返回一个VAD决定信息的数组。

  • timestamp: Int从样本缓冲区开始经过的时间,以毫秒为单位。
  • presentationTimestamp: CMTime这是CMSampleBuffer.presentationTime + timestamp,它可能代表整个录音会话的时间戳。
  • voiceActivity: VoiceActivity一个VAD决定。

示例

要运行示例项目,请先克隆仓库,然后从Example目录运行pod install

安装

VoiceActivityDetector 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中:

pod 'VoiceActivityDetector'

作者

reedom, [email protected]

许可协议

VoiceActivityDetector 在 MIT 许可协议下可用。更多信息请参阅 LICENSE 文件。