jaime71 escribió:
La verdad es que de informática yo sé lo justo, a nivel usuario.
¿Qué estás usando para detectar la altura, entonces?
jaime71 escribió:
Creo entender que tienes un afinador al principio que hace que se mueva una barra como en un afinador normal y por otro lado un sistema de muestras distinto, no es así.
No, son dos cosas distintas.
El núcleo del software es un detector de tono (pitch).
http://en.wikipedia.org/wiki/Pitch_detection_algorithm
En mi caso yo implementé uno relativamente sencillo usando autocorrelación. Para un sonido monofónico, de espectro sencillo y rango limitado y relativamente agudo (la nota más grave es un Do5 a 523,25 Hz) como el de la flauta dulce va perfecto. Hice pruebas de voz y piano y también funcionaba bien, pero posiblemente sea mucho menos fiable.
En aquel entonces me apoyaba en los libros de la carrera sobre DSP y en artículos del IEEE.
Hoy en día hay software libre del que se puede extraer código fuente con algoritmos más sofisticados y de mejor calidad. Por ejemplo hoy me iría directamente a adaptar código de
aubio o a algún otro software de análisis de audio como CLAM o SonicVisualiser/VAMP.
El detector de tono está constantemente generando eventos de medición de frecuencia cada pocos milisegundos, no recuerdo el tamaño de la ventana de análisis, son los que uso para la parte del afinador. A partir de ellos también puede generar eventos Note On - Note Off parecidos a una entrada MIDI (de hecho, se me acaba de ocurrir que en Java se podría encapsular como un dispositivo MIDI estándar, para que fuera intercambiable con otros).
El resto del programa responde a esos eventos y reacciona consecuentemente.
Las muestras se usan sólo en la actividad de reconocimiento de altura (las sirenas, 2:47 en el vídeo) para emitir las notas que el alumno tiene que imitar. En aquellos tiempos no me fiaba de la implementación del sinte de tabla de ondas que traía la JVM.
jaime71 escribió:
¿podrías tener las doce notas y en lo de los peces hacer algo que distinga los que tienen alteraciones de los que no los tienen?
Sí, sin problemas, el detector reconoce cualquier frecuencia. Se podría escribir la alteración como un dibujo en las escamas del pez, por ejemplo.
jaime71 escribió:
Esto no lo sabía, lo voy a ver en breve, te lo comentaré, espero que haya solución.
El problema es que la solución pasa por la intervención del usuario, y la configuración de los mecanismos de autorización es complicada, dependiente de la plataforma y llena de mensajes aterradores sobre lo que le puede pasar a tu equipo si das permisos. En este hilo intento ayudar a un usuario muy competente y no lo consigo:
https://www.hispasonic.com/foros/teoria-musical-para-ninos-coches-concepto-peculiar/465131
Hoy en día no usaría Java como plataforma de desarrollo, posiblemente cambiaría a
OpenFrameworks, o quizá a las APIs de audio que está sacando Google para Chrome.
jaime71 escribió:
refuerza la conexión con la partitura,
Esa es la parte que más me convence de tu proyecto, el asociar altura y posición en el pentagrama, aunque difiero en usar el desplazamiento lateral para las alteraciones.
Pero es un elemento que para mí siempre viene después, lo primero es darle significado a la altura, asociar el nombre de la nota o su función tonal o interválica con el sonido.
jaime71 escribió:
cuando no estás seguro de qué nota es la que cantas.
Para eso está el oído interno, que es lo que hay que desarrollar. El esfuerzo hay que hacerlo antes de cantar, no después, porque después ya no sirve de nada más que para verificar que te has equivocado y volver a empezar. Lo cual no es poco, pero el proceso de evaluación/corrección hay que integrarlo metodológicamente para que no vaya en contra del proceso de aprendizaje.
jaime71 escribió:
el programa no te corrige nada
Si cantas la nota más desafinada de medio semitono tu programa me imagino que responde con la nota más cercana, que no es la que se pretende cantar. En ese caso la corrección sería visual, siempre que el alumno sepa de partida el nombre de la nota que querría haber cantado.
Si cantas la nota buena, pero desafinada, el programa responderá con la nota bien afinada y el cantante corregirá su afinación para imitar la del programa.
En mi opinión ésta no es una buena dinámica de educación del oído. Yo cuando he dado clase de oído no permito corregir la afinación durante la emisión, la realimentación tiene que venir de dentro, a partir de una imagen mental clara de la nota que se pretende cantar. Si la nota cantada no es correcta hago al alumno parar, si lo necesita le doy la nota en el piano u otra nota que le sirva de apoyo para lo que estemos trabajando en ese momento (tónica, origen de un intervalo atonal, acorde incompleto...), y le vuelvo a pedir que imagine la nota antes de cantarla. Funciona mucho mejor que ponerle a hacer efecto doppler hasta que se enganche con la nota que está sonando.