Eu usei fluxo espectral no passado e parece funcionar bem. A idéia básica é criar um espectrograma do seu sinal através das bandas de que você gosta. Vamos supor que sua frequência esteja no eixo y e seu tempo no eixo x, assim .
Isso significa que seu espectrograma é uma matriz. Cada coluna representa o valor absoluto da FFT de um snap-shot no tempo do seu sinal e cada linha representa como a energia de uma banda muda ao longo do tempo.
Agora, basta considerar a diferença de colunas. Ou seja, pegue uma coluna e subtraia dela a coluna anterior e faça para todas as colunas. (Deixando as colunas de início sozinhas, obviamente). Em seguida, some todas as bandas. Ou seja, basta somar todas as linhas.
Você terminará com um sinal 1-D que codifica seu sinal inicializado . Isso lhe dirá onde sua voz começa.
EDITAR:
Agora que você detectou os onets, se deseja detectar o oposto (ou seja, quando um sinal passa de atividade para nenhum), o fluxo espectral realmente fornece essas informações. Onde quer que você comece, você terá um pico positivo e, onde quer que tenha um 'deset' (por falta de uma palavra melhor), terá um pico negativo.
Eu simplesmente pegaria o primeiro pico positivo e o último pico negativo para marcar o tempo total de início e parada do meu sinal.