Estoy tratando de implementar un juego de canto que analizará la entrada de micrófono sin procesar y le dirá al jugador lo bueno que está cantando. Eso debe hacerse en tiempo real.
Me he encontrado con muchos hilos haciendo la misma pregunta, pero todavía no he terminado, probablemente debido a mi falta de experiencia en el campo y mi escaso conocimiento matemático. He implementado un algoritmo basado en el artículo del cambio de tono del sitio web DSPDimension: http://www.dspdimension.com/admin/pitch-shifting-using-the-ft/
Extraigo la verdadera frecuencia y magnitud tal como explica el artículo, pero no sé encontrar la frecuencia fundamental con esto. Intenté obtener el contenedor con la mayor magnitud, pero eso solo me da los resultados correctos para señales de tono más altas, no importa qué factor de sobremuestreo use, aún obtengo datos incorrectos para señales de baja frecuencia. ¿Este enfoque es completamente incorrecto o estoy en el camino correcto pero me falta algo?
Gracias por adelantado,
EDITAR: Olvidé mencionar que solo estoy interesado en la clase de lanzamiento, por lo que está bien si falta el fundamental, pero tengo un tono fuerte en la muestra.
EDIT2: Gracias a todos, acabo de terminar una versión del algoritmo que funciona de maravilla. El problema de la estimación de tono bajo se debió a mi prueba de entrada. Cuando canté la nota, coincidía correctamente. Además, estoy considerando todos los armónicos ahora, no solo el pico más alto.