Pergunta

Eu estava procurando implementar a detecção de arremesso de voz no iPhone usando o método HPS. Mas os tons detectados não são muito precisos. Performous Faz um trabalho decente de detecção de arremesso.

Eu olhei através do código, mas não entendi completamente a teoria por trás dos cálculos. Eles usam FFT e encontram os picos. Mas a parte em que eles usam a fase da saída da FFT me confundiu. Eu sou que eles usam algumas heurísticas para frequências de voz.

Então, alguém poderia explicar o algoritmo usado no Performous para detectar o tom?

Foi útil?

Solução

Performous] [1] extrai a inclinação do microfone. Além disso, o código é de código aberto. Aqui está uma descrição do que o algoritmo faz, do cara que o codificou (Tronic no irc.freenode.net#performous).

  • Entrada PCM (com buffer)
  • FFT (1024 amostras por vez, remova 200 amostras da frente do buffer depois)
  • Método de reatribuição (contra a FFT anterior que foram 200 amostras anteriormente)
  • Filtragem de picos (esta parte pode ser feita muito melhor ou até deixada de fora)
  • Combinando picos em conjuntos de harmônicos (chamamos a combinação de tom)
  • Filtragem temporal de tons (atualize o conjunto de tons detectados anteriormente, em vez de simplesmente usar os recém -detectados)
  • Escolha o melhor tom vocal (limites de frequência, ponderação, também podem usar a matriz harmônica, mas acho que não fazemos)

Eu ainda não consegui dessas informações para descobrir e implementá -las. Se alguém gerenciar isso, poste seus resultados aqui e comente esta resposta para que me notifique.

A tarefa seria criar um invólucro C ++ mínimo em torno deste código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top