Como posso fazer a detecção de arremesso em tempo real no .NET?
-
26-09-2019 - |
Pergunta
Quero fazer um programa que detecte a nota que está sendo tocada na frente do microfone. Estou testando a função FFT de Naudio, mas com os testes que fiz no Audacity, parece que a FFT não detecta o tom corretamente. Eu joguei um C5, mas a escolha mais alta foi no E7.
Alterei a primeira caixa suspensa na janela de análise de frequência para "autocorrelação encantada" e, depois disso, a escolha mais alta foi no C5.
Pesquisei no Google "autocorrelação encantada" e não tive sorte.
Solução
O pico mais alto de um espectro de áudio não é necessariamente o tom musical, pois um humano o perceberia, especialmente em um som com fortes conotações. Isso ocorre porque o tom é um fenômeno psico-perceptivo humano, o cérebro geralmente deduz frequências que nem estão presentes em uma forma de onda.
Métodos de correlação automática de estimativa de frequência ou afinação (aproximadamente, encontrar o quão distante até mesmo uma forma de onda de aparência engraçada e/ou não sinoidal as repetições no tempo) é geralmente uma correspondência melhor para o que um humano chamaria de tom. A razão para vários aprimoramentos no algoritmo de autocorrelação é que a autocorrelação simples encontrará um número quase infinito de comprimentos de onda repetidos (por exemplo, se repetir a cada 1 segundo, ele também repete duas vezes a cada 2 segundos, etc.), então o truque é ponderar a correlação para De alguma forma, estatisticamente combina melhor o que um humano adivinharia sobre a mesma forma de onda.
Outras dicas
Você provavelmente está sendo expulso por harmônicos. Você já tentou testar com uma onda senoidal para ver se a FFT do seu Naudio está no estádio?
Veja estas referências:http://cnx.org/content/m11714/latest/
http://www.gamedev.net/community/forums/topic.asp?topic_id=506592&whichpage=1�
Linha 48 in Spectrum.cpp
No código -fonte do Audacity, parece estar próximo do que você deseja. Eles também fazem referência a um Papel IEEE de Tolonen e Karjalainen.
Bem, se você pode morar com GPLV2, por que não dar uma olhada no código -fonte do Audacity?