GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es un buen enfoque para extraer partes del discurso de un archivo de audio arbitrario?

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.


Linux
  1. ¿Qué define a un reproductor de música de código abierto de primer nivel para Linux?

  2. ¿Qué comandos faltan en su archivo bashrc?

  3. ¿Qué significa "rc" en .bashrc?

  4. ¿Para qué sirven los inodos?

  5. Lectura de líneas de un archivo con Bash:para vs. ¿Mientras?

¿Cuáles son buenos libros de Linux/Unix para un usuario avanzado?

¿Para qué sirven los archivos .la de libtool?

¿Qué es un archivo .sh?

¿Para qué sirve Linux test -a command test?

¿Cuál es el archivo predeterminado para `hostname`?

¿Qué significa un + al final de los permisos de ls -l?