Estou tentando implementar um jogo de canto que analise a entrada bruta do microfone e diga ao jogador o quão bom ele está cantando. Isso precisa ser feito em tempo real.
Eu me deparei com muitos tópicos fazendo a mesma pergunta, mas ainda não terminei a tarefa, provavelmente devido à minha falta de experiência no campo e à pouca experiência em matemática. Eu implementei um algoritmo baseado no artigo da alteração de pitch do site DSPDimension: http://www.dspdimension.com/admin/pitch-shifting-using-the-ft/
Extraio a verdadeira frequência e magnitude, exatamente como o artigo explica, mas não sei encontrar a frequência fundamental com isso. Tentei obter a lixeira com maior magnitude, mas isso só me dá resultados corretos para sinais de tom mais alto, não importa qual fator de superamostragem eu uso, ainda recebo dados ruins para sinais de baixa frequência. Essa abordagem está completamente errada ou estou no caminho certo, mas estou perdendo alguma coisa?
Desde já, obrigado,
EDIT: Eu esqueci de mencionar que só estou interessado na aula de pitch, então está tudo bem se o fundamental estiver faltando, mas eu tenho um tom forte na amostra.
EDIT2: Obrigado a todos, acabei de terminar uma versão do algoritmo que funciona como um encanto. O problema da estimativa do tom baixo foi devido ao meu teste de entrada. Quando cantei a nota, ela combinou corretamente. Além disso, estou considerando todas as harmônicas agora, não apenas o pico mais alto.