Abaixo está um sinal que representa a gravação de alguém falando. Eu gostaria de criar uma série de sinais de áudio menores com base nisso. A idéia é detectar quando o som 'importante' começa e termina e usa-os como marcadores para criar um novo trecho de áudio. Em outras palavras, eu gostaria de usar o silêncio como indicadores de quando um 'pedaço' de áudio foi iniciado ou parado e criar novos buffers de áudio com base nisso.
Por exemplo, se uma pessoa se registra dizendo
Hi [some silence] My name is Bob [some silence] How are you?
então eu gostaria de fazer três clipes de áudio com isso. Um que diz Hi
, um que diz My name is Bob
e outro que diz How are you?
.
Minha idéia inicial é percorrer o buffer de áudio constantemente verificando onde existem áreas de baixa amplitude. Talvez eu possa fazer isso coletando as dez primeiras amostras, calculando a média dos valores e, se o resultado for baixo, rotule-o como silencioso. Eu continuaria com o buffer verificando as próximas dez amostras. Incrementando desta maneira, eu pude detectar onde os envelopes começam e param.
Se alguém tiver algum conselho sobre uma maneira boa, mas simples de fazer isso, seria ótimo. Para meus propósitos, a solução pode ser bastante rudimentar.
Não sou profissional no DSP, mas entendo alguns conceitos básicos. Além disso, eu faria isso programaticamente, para que fosse melhor falar sobre algoritmos e amostras digitais.
Obrigado por toda a ajuda!
EDIT 1
Ótimas respostas até agora! Só queria esclarecer que isso não está no áudio ao vivo e eu mesmo escreverei os algoritmos em C ou Objective-C, para que quaisquer soluções que usem bibliotecas não sejam realmente uma opção.