Votre objectif est d'imprimer les paroles de la chanson "Twinkle Twinkle Little Star" au fur et à mesure que chaque note est jouée.
Le microphone de l'ordinateur entendra les notes. Si la hauteur (mais pas nécessairement la longueur) de la note est correcte, imprimez la syllabe appropriée. Sinon, ne faites rien. Chaque note durera au moins une demi-seconde et il y aura une pause d'au moins un quart de seconde entre les notes.
Utilisez les notes de musique fournies ici et les paroles suivantes: (Les lignes verticales représentent les sauts de syllabe.)
Twin | kle, twin | kle, lit | tle star,
Comment j'ai gagné | der ce que tu es.
Au-dessus du monde si haut,
Comme un diamant dans le ciel.
Twin | kle, twin | kle, lit | tle star,
Comment j'ai gagné | der ce que tu es.
Un enregistrement de la musique peut être trouvé ici .
Exemple
L'ordinateur entend un C du milieu et imprime "Twin"
Il entend un autre C moyen et imprime "kle"
Ensuite, il entend un autre do du milieu (mauvaise note) et ne fait rien.
Ensuite, il entend le G au-dessus du milieu C et imprime "twin" et ainsi de suite.
Règles
- La ponctuation doit être comme indiqué.
- L'espacement doit être comme indiqué (avec des espaces et des retours à la ligne).
- L'espace peut être imprimé avec la syllabe précédente ou suivante.
Réponses:
Python 3 - Solution partielle (
760742734710705657 caractères)(Dernière modification; je le promets)
Cela semble être un problème vraiment, assez, très difficile (en particulier reconnaître le début ou la fin des notes). La transcription automatique de la musique semble être un sujet de recherche ouvert (pas que je sache quoi que ce soit à ce sujet). Voici donc une solution partielle qui ne fait aucune segmentation de note (par exemple, elle imprime "Twinkle" en une seule fois quand elle entend la fréquence) et ne fonctionne probablement que pour ce fichier ogg spécifique:
Cela nécessite...
Modifiez A = -52 (amplitude minimale) sur la ligne supérieure en fonction de votre microphone, de la quantité de son ambiant, de la puissance de la chanson, etc. Sur mon microphone, moins de -57 semble capter beaucoup de bruit étranger et plus de -49 vous oblige à jouer très fort.
Cela pourrait être beaucoup plus joué au golf; Je suis sûr qu'il existe des moyens d'enregistrer un tas de caractères sur le tableau de mots en particulier. Ceci est mon premier programme non trivial en python, donc je ne connais pas encore très bien le langage.
J'ai volé le code de détection de fréquence via l'autocorrélation sur https://gist.github.com/endolith/255291
Non golfé:
la source