2015-05-02 26 views
8

Attualmente, io uso sox come questo:Utilizzando sox per il rilevamento di voce e lo streaming

sox -d -e u-law --endian little -b 8 -c 1 -r 8000 -t ul - silence 1 0.3 1% 1 0.3 1% 

Per riferimento, questa è la registrazione audio dal microfono predefinito e l'output little endian, ulaw audio in formato a 8 bit e un 8k Vota. Il filtro degli effetti taglia l'audio fino a quando il rumore raggiunge una soglia per 0,3 secondi, quindi continua a registrare finché non ci sono 0,3 secondi di silenzio. Tutti questi flussi per lo stdout che uso per lo streaming su un server remoto.

Sto usando tutto questo per registrare un po 'di voce e finire quando ho finito di parlare. Per attivare il sox, utilizzo hardware specializzato per avviare l'avvio della registrazione. Posso passare a quasi tutti i formati audio o codec purché supporti la formattazione/codifica in tempo reale. La mia piattaforma di destinazione è raspbian sul raspberry pi 2 B.

La mia soluzione ideale sarebbe quella di usare vad per fermare la registrazione quando l'utente ha finito di parlare. La mia speranza è che funzioni anche con le chatter di sottofondo. Tuttavia, la documentazione sox sugli stati effetti vad questo:

si consiglia l'uso dell'effetto norma, ma ricordate che né inverso né norma è adatto per l'uso con l'audio in streaming.

Non sono riuscito a mettere insieme i parametri per far funzionare vad e streaming. È possibile utilizzare l'effetto vad per interrompere la registrazione dell'audio mantenendo le connessioni stdin-> sox-> stdout? Ci sono alternative migliori?

risposta

1

È possibile utilizzare l'effetto vad per interrompere la registrazione dell'audio mantenendo le connessioni stdin-> sox-> stdout?

No. L'effetto vad può ridurre il silenzio solo dalla parte anteriore dell'audio. Quindi puoi usarlo solo per rilevare l'avvio della registrazione e non la fine e le pause.

I filtri reverse e norm richiedono tutti i dati di input prima che producano dati sull'output, motivo per cui non possono essere utilizzati con lo streaming.

Il tasto consente di selezionare una soglia valida per il filtro silence in modo che le "interruzioni di sottofondo" richiedano il silenzio.

È possibile utilizzare anche noisered (con un profilo basato su registrazioni precedenti) prima dello silence per ridurre il disturbo che causa la registrazione, ma ciò influirà anche sull'output e probabilmente non si considereranno "rumore di sottofondo" come rumore.