基于 WebRTC 的语音活动检测
这是 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 文件。