GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è un buon approccio per estrarre parti del discorso da un file audio arbitrario?

Rilevatore di energia

Per il rilevamento dell'attività vocale, ho utilizzato il programma EnergyDetector del toolkit di riconoscimento degli altoparlanti MISTRAL (era LIA_RAL), basato sulla libreria ALIZE.

Funziona con file di funzionalità, non con file audio, quindi dovrai estrarre l'energia del segnale. Di solito estraggo le caratteristiche cepstrali (MFCC) con il parametro log-energy e utilizzo questo parametro per VAD. Puoi utilizzare sfbcep`, un'utilità parte del toolkit di elaborazione del segnale SPro nel modo seguente:

sfbcep -F PCM16 -p 19 -e -D -A input.wav output.prm

Estrarrà 19 MFCC + coefficiente log-energia + coefficienti delta di primo e secondo ordine. Il coefficiente energetico è il 19, lo specifichi nel file di configurazione di EnergyDetector.

Quindi eseguirai EnergyDetector in questo modo:

EnergyDetector --config cfg/EnergyDetector.cfg --inputFeatureFilename output 

Se usi il file di configurazione che trovi alla fine della risposta, devi mettere output.prm in prm/ e troverai la segmentazione in lbl/ .

Come riferimento, allego il mio file di configurazione 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 Sfinge

Il software di riconoscimento vocale CMU Sphinx contiene un VAD integrato. È scritto in C e potresti essere in grado di hackerarlo per produrre un file etichetta per te.

Un'aggiunta molto recente è il supporto GStreamer. Ciò significa che puoi utilizzare il suo VAD in una pipeline multimediale GStreamer. Vedi Usare PocketSphinx con GStreamer e Python -> L'elemento 'vader'

Altri VAD

Ho anche utilizzato una versione modificata del codec AMR1 che emette un file con classificazione vocale/non vocale, ma non riesco a trovare le sue fonti online, mi dispiace.


webrtcvad è un wrapper Python attorno all'eccellente codice WebRTC Voice Activity Detection di Google.

Viene fornito con un file, example.py, che fa esattamente quello che stai cercando:dato un file .wav, trova ogni istanza di qualcuno che parla e la scrive in un nuovo file .wav separato.

L'API webrtcvad è estremamente semplice, nel caso in cui example.py non faccia proprio quello che vuoi:

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)

Hi pyAudioAnalysis ha una funzionalità di rimozione del silenzio.

In questa libreria, la rimozione del silenzio può essere così semplice:

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)

Silenzia internamente removal() segue un approccio semi-supervisionato:prima viene addestrato un modello SVM per distinguere tra frame a breve termine ad alta e bassa energia. A tal fine, vengono utilizzati il ​​10% dei telai a più alta energia insieme al 10% di quelli a più bassa. Quindi, l'SVM viene applicato (con un output probabilistico) sull'intera registrazione e viene utilizzata una soglia dinamica per rilevare i segmenti attivi.


Linux
  1. Cos'è un file .so.2?

  2. Qual è una buona soluzione per la codifica dei file in Linux?

  3. Cos'è un buon visualizzatore di file CHM per (Fedora) Linux?

  4. Qual è il file predefinito per `hostname`?

  5. Cosa significa un + alla fine dei permessi da ls -l?

Quali comandi mancano nel tuo file bashrc?

A cosa servono gli inode?

A cosa servono i file .la di libtool?

Hai bisogno di un buon editor esadecimale per Linux

Qual è un buon approccio per estrarre parti del discorso da un file audio arbitrario?

Cos'è un file .sh?