Detector de energía
Para la Detección de actividad de voz, he estado usando el programa EnergyDetector del kit de herramientas de reconocimiento de parlantes MISTRAL (antes LIA_RAL), basado en la biblioteca ALIZE.
Funciona con archivos de funciones, no con archivos de audio, por lo que deberá extraer la energía de la señal. Normalmente extraigo características cepstrales (MFCC) con el parámetro log-energy, y uso este parámetro para VAD. Puede usar sfbcep`, una parte de la utilidad del kit de herramientas de procesamiento de señales SPro de la siguiente manera:
sfbcep -F PCM16 -p 19 -e -D -A input.wav output.prm
Extraerá 19 MFCC + coeficiente de log-energía + coeficientes delta de primer y segundo orden. El coeficiente de energía es el 19, lo especificará en el archivo de configuración de EnergyDetector.
Luego ejecutará EnergyDetector de esta manera:
EnergyDetector --config cfg/EnergyDetector.cfg --inputFeatureFilename output
Si usa el archivo de configuración que encuentra al final de la respuesta, debe poner output.prm
en prm/
, y encontrarás la segmentación en lbl/
.
Como referencia, adjunto mi archivo de configuración de 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
Esfinge de CMU
El software de reconocimiento de voz CMU Sphinx contiene un VAD incorporado. Está escrito en C y es posible que pueda piratearlo para producir un archivo de etiqueta para usted.
Una adición muy reciente es el soporte de GStreamer. Esto significa que puede usar su VAD en una canalización de medios de GStreamer. Ver Uso de PocketSphinx con GStreamer y Python -> El elemento 'vader'
Otros VAD
También he estado usando una versión modificada del códec AMR1 que genera un archivo con clasificación de voz/no voz, pero no puedo encontrar sus fuentes en línea, lo siento.
webrtcvad es un contenedor Python del excelente código de detección de actividad de voz WebRTC de Google.
Viene con un archivo, ejemplo.py, que hace exactamente lo que está buscando:dado un archivo .wav, encuentra cada instancia de alguien hablando y lo escribe en un nuevo archivo .wav separado.
La API de webrtcvad es extremadamente simple, en caso de que example.py no haga exactamente lo que desea:
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)
Hola, pyAudioAnalysis tiene una función de eliminación de silencio.
En esta biblioteca, la eliminación del silencio puede ser tan simple como eso:
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)
Silenciar internamente removal()
sigue un enfoque semisupervisado:primero se entrena un modelo SVM para distinguir entre marcos a corto plazo de alta y baja energía. Para ello se utiliza el 10% de los marcos de mayor energía junto con el 10% de los de menor energía. Luego, se aplica el SVM (con una salida probabilística) sobre todo el registro y se usa un umbral dinámico para detectar los segmentos activos.