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.
fonte
Respostas:
Isso ocorre porque os harmônicos são maiores que o fundamental. Plote seu espectro e você verá. Um método melhor para encontrar o verdadeiro fundamento é a autocorrelação. Então você está "deslizando" a forma de onda para além de si mesma e encontra atrasos nos quais a forma da onda se alinha.
http://www.phon.ucl.ac.uk/courses/spsci/matlab/lect10.html
Você realmente quer que eles cantem a nota exata ou está tudo bem se eles cantam uma oitava acima ou abaixo, dependendo do registro de voz?
fonte
Sim, o uso de um estimador de frequência de pico para afinação está errado. O pitch é um fenômeno psicoacústico, portanto a detecção ou estimativa do pitch é diferente da estimativa da frequência. Existem muitos métodos de estimativa de pitch apresentados em respostas anteriores para perguntas semelhantes aqui. Há mais de 1 para escolher.
Aqui está um: /programming/4227420/matlab-missing-fundamental-from-an-fft/4231322#4231322 e outro: Dicas para melhorar a detecção de afinação
ADICIONADO Nº 1: Perguntas semelhantes a essa são feitas com tanta frequência que escrevi uma postagem de blog mais longa sobre o tópico: http://www.musingpaw.com/2012/04/musical-pitch-is-not-just-fft- frequency.html
fonte