Ihr Ziel ist es, die Texte zum Lied "Twinkle Twinkle Little Star" zu drucken, während jede Note gespielt wird.
Das Mikrofon des Computers hört Notizen. Wenn die Tonhöhe (aber nicht unbedingt die Länge) der Note korrekt ist, drucken Sie die entsprechende Silbe. Sonst nichts tun. Jede Note ist mindestens eine halbe Sekunde lang, und zwischen den Noten liegt eine Pause von mindestens einer Viertelsekunde.
Verwenden Sie die hier angegebenen Noten und den folgenden Text: (Vertikale Linien stehen für Silbenumbrüche.)
Twin | kle, twin | kle, lit | tle star,
Wie ich gewinne, was du bist.
Hoch über der Welt,
Wie ein Mond am Himmel.
Twin | kle, twin | kle, lit | tle star,
Wie ich gewinne, was du bist.
Eine Aufnahme der Musik finden Sie hier .
Beispiel
Der Computer hört ein mittleres C und druckt "Twin"
Es hört ein weiteres mittleres C und gibt "kle" aus.
Dann hört es ein weiteres mittleres C (falsche Note) und tut nichts.
Dann hört es das G über dem mittleren C und druckt "Zwilling" und so weiter.
Regeln
- Die Zeichensetzung muss wie gezeigt sein.
- Der Abstand muss wie gezeigt sein (mit Leerzeichen und Zeilenumbrüchen).
- Das Leerzeichen kann zusammen mit der vorherigen oder der nächsten Silbe gedruckt werden.
Antworten:
Python 3 - Teillösung (
760742734710705657 Zeichen)(Letzte Änderung; Ich verspreche es)
Dies scheint ein wirklich, hübsches, sehr schwieriges Problem zu sein (insbesondere das Erkennen, wo die Noten beginnen oder enden). Die automatische Transkription von Musik scheint ein offenes Forschungsthema zu sein (nicht, dass ich etwas darüber weiß). Hier ist eine Teillösung, die keine Notensegmentierung vornimmt (z. B. "Twinkle" auf einmal ausgibt, wenn die Frequenz abgehört wird) und wahrscheinlich nur für diese bestimmte ogg-Datei funktioniert:
Dafür braucht man...
Ändern Sie die A = -52 (minimale Amplitude) in der oberen Zeile abhängig von Ihrem Mikrofon, der Lautstärke des Umgebungsgeräuschs, der Lautstärke des Songs usw. Bei meinem Mikrofon scheint weniger als -57 viel Fremdgeräusch aufzunehmen und mehr als -49 erfordert, dass Sie es sehr laut spielen.
Dies könnte viel mehr golfen werden; Ich bin mir sicher, dass es Möglichkeiten gibt, eine Reihe von Zeichen im Wortfeld zu speichern. Dies ist mein erstes nicht-triviales Programm in Python, daher bin ich mit der Sprache noch nicht sehr vertraut.
Ich habe den Code für die Frequenzerkennung per Autokorrelation von https://gist.github.com/endolith/255291 gestohlen
Ungolfed:
quelle