Java 实现依赖TarsosDSP类库的VAD
vad 介绍
语音活性检测
(Voice activity detection,VAD), 也称为speech activity detection or speech detection, 是一项用于语音处理的技术,目的是检测语音信号是否存在。
目前开源vad项目多为c / c++ 很少有java项目
TarsosDSP 介绍
TarsosDSP是用于音频处理的Java库。其目的是提供一种易于使用的界面,以实用的音乐处理算法,以尽可能简单的方式在纯Java中实现,而没有任何其他外部依赖性。该库试图在既有能力完成实际任务又有足够紧凑和简单的方法之间达到最佳效果,以演示DSP算法的工作原理。TarsosDSP具有打击乐开始检测器和多种音高检测算法的实现:YIN,Mcleod Pitch方法和“动态小波算法音高跟踪”算法。还包括Goertzel DTMF解码算法,时间拉伸算法(WSOLA),重采样,滤波器,简单的合成,一些音频效果和音高转换算法。
我这边使用了2.4版本 主要使用了 TarsosDSPAudioFormat
TarsosDSPAudioFloatConverter
SilenceDetector
详细内容参考2.4版本官方文档
代码vad类介绍
构造方法
VAD(String filePath, float sampleRate, int sampleSizeInBits, int noinputTimeout, int silenceTimeout)
参数为文件路径(filePath) 采样率(sampleRate) 位深度(sampleSizeInBits) 开始跳过的时长(noinputTimeout) 最大沉默时长(silenceTimeout)
启动方法
start()
读取目标文件并将字节按计算出100ms的长度放到队列中 并启动检测线程
检测线程
vadRunbale.run()
以100ms为单位时长 使用TarsosDSP提供的方法检测 检测到自定义的最大静默次数时结束线程
vad类源码
package com.jjd.test;
import be.tarsos.dsp.SilenceDetector;
import be.tarsos.dsp.io.TarsosDSPAudioFloatConverter;
import be.tarsos.dsp.io.TarsosDSPAudioFormat;
import org.apache.commons.io.IOUtils;
import java.io.*;
import java.util.concurrent.ConcurrentLinkedQueue;
public class VAD {
private ConcurrentLinkedQueue<byte[]> audioQueue = new ConcurrentLinkedQueue<byte[]>();
private boolean isRunning = false; // 识别引擎是否在执行识别
private boolean isFinishReadFile = false; // 是否读取完文件
private String filePath;
private int readLength = 1600; // 100ms音频的字节数
private int noinputTimeout = 1000; //跳过开始多少ms
private int silenceMaxTimes = 10; // 以100ms为单位 检测连续的多少次静音
private float sampleRate = 8000; // 采样率
private int sampleSizeInBits = 16; //位深度
public