我有一组由用户上传的音频文件,并且不知道它们包含什么。
我想获取一个任意音频文件,并将某人正在讲话的每个实例提取到单独的音频文件中。我不想检测实际的单词,只是“开始讲话”,“停止说话”点并在这些点生成新文件。
(我的目标是Linux环境,并在Mac上进行开发)
我发现Sox看起来很有前途,而且它有'vad'模式(语音活动检测)。然而,这似乎找到了第一个语音实例,并在此之前剥离音频,所以它很接近,但不是很正确。
我也看过Python的'wave'库,但后来我需要编写自己的Sox'vad'实现。
是否有任何命令行工具能够满足我的需求?如果没有,任何好的Python或Ruby方法?
答案 0 :(得分:22)
对于语音活动检测,我一直在使用基于ALIZE库的MISTRAL(是LIA_RAL)说话人识别工具包的EnergyDetector程序。
它适用于功能文件,而不适用于音频文件,因此您需要提取信号的能量。我通常使用log-energy参数提取倒谱特征(MFCC),我将此参数用于VAD。您可以通过以下方式使用sfbcep`,SPro信号处理工具包的实用程序部分:
sfbcep -F PCM16 -p 19 -e -D -A input.wav output.prm
它将提取19个MFCC +对数能量系数+一阶和二阶delta系数。能量系数是19,您将在EnergyDetector配置文件中指定。
然后您将以这种方式运行EnergyDetector:
EnergyDetector --config cfg/EnergyDetector.cfg --inputFeatureFilename output
如果您使用在答案末尾找到的配置文件,则需要将output.prm
放入prm/
,然后您才能在lbl/
中找到细分。< / p>
作为参考,我附上了我的EnergyDetector配置文件:
*** EnergyDetector Config File
***
loadFeatureFileExtension .prm
minLLK -200
maxLLK 1000
bigEndian false
loadFeatureFileFormat SPRO4
saveFeatureFileFormat SPRO4
saveFeatureFileSPro3DataKind FBCEPSTRA
featureServerBufferSize ALL_FEATURES
featureServerMemAlloc 50000000
featureFilesPath prm/
mixtureFilesPath gmm/
lstPath lst/
labelOutputFrames speech
labelSelectedFrames all
addDefaultLabel true
defaultLabel all
saveLabelFileExtension .lbl
labelFilesPath lbl/
frameLength 0.01
segmentalMode file
nbTrainIt 8
varianceFlooring 0.0001
varianceCeiling 1.5
alpha 0.25
mixtureDistribCount 3
featureServerMask 19
vectSize 1
baggedFrameProbabilityInit 0.1
thresholdMode weight
CMU Sphinx语音识别软件包含内置VAD。它是用C语言编写的,您可以通过它来破解它来为您生成标签文件。
最近新增的是GStreamer支持。这意味着您可以在GStreamer媒体管道中使用其VAD。见Using PocketSphinx with GStreamer and Python -> The 'vader' element
我一直在使用AMR1编解码器的修改版本输出带语音/非语音分类的文件,但我无法在线找到它的来源,抱歉。
答案 1 :(得分:3)
webrtcvad是围绕Google卓越的WebRTC语音活动检测代码的Python包装器。
它附带了一个文件example.py,它正是您正在寻找的文件:给定一个.wav文件,它会找到某人说话的每个实例并将其写入一个新的单独.wav文件
webrtcvad API非常简单,以防example.py无法满足您的需求:
import webrtcvad
vad = webrtcvad.Vad()
# sample must be 16-bit PCM audio data, either 8KHz, 16KHz or 32Khz,
# and 10, 20, or 30 milliseconds long.
print vad.is_voiced(sample)
答案 2 :(得分:2)
嗨pyAudioAnalysis具有静音删除功能。
在这个库中,静音消除可以简单:
from pyAudioAnalysis import audioBasicIO as aIO
from pyAudioAnalysis import audioSegmentation as aS
[Fs, x] = aIO.readAudioFile("data/recording1.wav")
segments = aS.silenceRemoval(x, Fs, 0.020, 0.020, smoothWindow = 1.0, Weight = 0.3, plot = True)
内部沉默removal()
遵循半监督方法:首先训练SVM模型以区分高能量和低能量短期帧。为此,使用了10%的最高能量帧和10%的最低能量帧。然后,在整个记录中应用SVM(具有概率输出),并使用动态阈值来检测活动段。
答案 3 :(得分:0)
SPro和HTK是您需要的工具包。您还可以使用Alize Toolkit的文档查看实现。