Su objetivo es imprimir la letra de la canción "Twinkle Twinkle Little Star" a medida que se toca cada nota.
El micrófono de la computadora escuchará notas. Si el tono (pero no necesariamente la duración) de la nota es correcto, imprima la sílaba apropiada. De lo contrario, no hagas nada. Cada nota tendrá una duración de al menos medio segundo, y habrá un descanso de al menos un cuarto de segundo entre las notas.
Use las notas musicales proporcionadas aquí y las siguientes letras: (Las líneas verticales representan saltos de sílabas).
Twin | kle, twin | kle, lit | tle estrella,
Cómo gané lo que eres.
Arriba un mundo tan alto
Como un dia | mond en el cielo.
Twin | kle, twin | kle, lit | tle estrella,
Cómo gané lo que eres.
Una grabación de la música se puede encontrar aquí .
Ejemplo
La computadora oye una C media e imprime "Twin"
Oye otra C media e imprime "kle"
Luego escucha otra C media (nota incorrecta) y no hace nada.
Luego oye la G arriba de la C central e imprime "gemelo" y así sucesivamente.
Reglas
- La puntuación debe ser como se muestra.
- El espaciado debe ser como se muestra (con espacios y líneas nuevas).
- El espacio en blanco se puede imprimir junto con la sílaba anterior o siguiente.
Respuestas:
Python 3 - solución parcial (
760742734710705657 caracteres)(Última edición; lo prometo)
Esto parece un problema muy, muy, muy difícil (especialmente reconocer dónde comienzan o terminan las notas). La transcripción automática de música parece un tema de investigación abierto (no es que yo sepa nada al respecto). Así que aquí hay una solución parcial que no hace ninguna segmentación de notas (por ejemplo, imprime "Twinkle" de una vez cuando escucha la frecuencia) y probablemente solo funciona para ese archivo ogg específico:
Esto requiere...
Cambie la A = -52 (amplitud mínima) en la línea superior dependiendo de su micrófono, cantidad de sonido ambiental, qué tan fuerte suena la canción, etc. En mi micrófono, menos de -57 parece captar mucho ruido extraño y más de -49 requiere que lo juegues muy alto.
Esto podría jugar mucho más golf; Estoy seguro de que hay formas de guardar un montón de caracteres en la matriz de palabras en particular. Este es mi primer programa no trivial en python, por lo que todavía no estoy muy familiarizado con el lenguaje.
Robé el código para la detección de frecuencia mediante autocorrelación de https://gist.github.com/endolith/255291
Sin golf:
fuente