Sí, ¡en esto consiste la FFT! Para obtener el espectro de frecuencias de los datos que se introducen. La parte difícil son los detalles de implementación, como has mencionado.
Dependiendo de lo que quieras hacer, exactamente, cambia la respuesta.
Si sólo quieres analizar tu propia música, ya existen programas informáticos para hacerlo. Puedes buscar ecualizadores que muestren la respuesta (básicamente la FFT), o conseguir un "ecualizador musical" que muestre también los tonos. Puedes conseguir VST's de audio a midi que convierten lo que tocas en las notas midi correctas. Si tu teclado es midi, omite los VST y graba el midi directamente.
Si quieres enseñarte a ti mismo la FFT y cómo se relaciona con la música, entonces es mejor conseguir algo como Matlab donde puedes calcular la FFT de cualquier dato. Tiene la capacidad de grabar y también reproducir junto con la lectura de archivos wav y tal. Estos entonces ser reall fácil de usar. Puedes graficar el audio y hacer todo tipo de análisis bastante rápido si conoces la sintaxis.
Si quieres construir un dispositivo para hacer tal cosa, es bastante complejo. Necesitarás un uC/dsp/fpga/etc para hacer los cálculos. La mayoría de los dispositivos populares ya vienen con el código FFT para que no tengas que codificarlo tú mismo (también complicado).
Tendrás que construir los circuitos y todo eso. No es difícil, pero dependiendo de tu experiencia/conocimiento puede llevar bastante tiempo y tiene una curva de aprendizaje pronunciada. También depende de la calidad del producto final.
Matemáticamente, una nota musical ideal consiste en una serie geométrica de la "fundamental".
Supongamos que F0 es la frecuencia fundamental, entonces la mayoría de las notas musicales se aproximarán por F(t) + F0*suma(a_k e^(2^k F0*pi i t)) = F0 + a_1*F1 + a_2*F2 + ....
Las a_k no son más que la fuerza de esas frecuencias más altas F_k y F_k no es más que algún múltiplo de F0. Si a_k = 0 para todo k, entonces tenemos una sinusoide pura. El tono de esto es fácil de detectar. Basta con encontrar el máximo de la FFT y esa frecuencia es la fundamental del tono = la nota musical.
Cuando se toma la FFT, se termina con datos que, y sólo hacer las matemáticas en. Es básicamente el cálculo.
Todo eso es relativamente fácil.
Algunos problemas con los que tendrás que lidiar. Ten en cuenta que no todos están "resueltos".
-
Latencia - Si vas a hacer cualquier tipo de cosas en tiempo real, esto puede convertirse en un problema.
-
Notas múltiples - Es difícil determinar el grupo de notas debido a todos los armónicos adicionales. Si tocas A = 440hz y A' = 880hz, la mayoría de los armónicos se solaparán. Puedes conseguir fácilmente el A = 440hz, pero conseguir el A' = 880hz es más difícil. Cuando se piensa en acordes, carreras rápidas, etc, entonces puede ser muy difícil obtener con precisión toda la información (notas). Aunque en general todo es matemáticamente posible, los datos en sí tienen errores y aberraciones, y las ecuaciones están poco definidas en algunos casos.
-
Ruido - El ruido en la señal puede dar resultados espurios. Si se produce un ruido musical, puede estropear los resultados. Se necesitarían entonces mejores algoritmos = tiempo + dinero + conocimientos.
0 votos
Estaría bien que fueras más específico en el título. Intenté incluir la parte del reconocimiento del tono del piano, pero mi inglés (no nativo) parece que me está fallando hoy.
1 votos
@pipe ok lo he cambiado
1 votos
La "muestra" de tocar una nota debería ser ya una forma de onda de amplitud y tiempo. Esencialmente, el punto 2 es redundante. Para una implementación relativamente simple, tus pasos anteriores deberían estar bien.
0 votos
@user2943160 Lo he añadido para que sea explícito. El sonido puede ser almacenado en muchos formatos, y por lo general se necesita un poco de manipulación para obtener una buena amplitud en el tiempo.
0 votos
@michaelsnowden: Estás utilizando mal el término "amplitud": la amplitud de una función sinusoidal \$y(t) = A\sin(\omega t)\$ es \$A\$ . Es el máximo de la señal (tensión, desplazamiento, ...) y es una constante (o cambia lentamente con respecto a la frecuencia). Lo que quieres decir es sólo la señal \$y(t)\$ . Si no fuera así, pensaría que por "amplitud en el tiempo" te refieres a la envolvente de la señal, pero por lo que entiendo no es así.
0 votos
@Curd whoops tienes razón esa no es la palabra correcta. Lo cambiaré
0 votos
@Curd ¿Qué palabra usarías? Técnicamente es presión ¿no?
0 votos
@michaelsnowden: sí, pero luego se transforma en una longitud (desplazamiento) de una membrana y eso es transformado en un voltaje por el micrófono (y posteriormente se digitaliza y se representa por una combinación de bits). Yo lo llamaría simplemente el (sonido) señal .
0 votos
También me gustaría sugerirte que mires esta pregunta similar de hace unas semanas, hay mucha información buena en este hilo physics.stackexchange.com/questions/268568/
0 votos
Esto fue casi exactamente mi proyecto de fin de carrera de informática, excepto que con acordes de guitarra, así que es posible
0 votos
No será tan sencillo como crees. La afinación del piano es un arte sutil: es.wikipedia.org/wiki/Inharmonicidad