Ваша цель - напечатать текст песни «Twinkle Twinkle Little Star», когда звучит каждая нота.
Микрофон компьютера будет слышать ноты. Если высота (но не обязательно длина) ноты правильна, выведите соответствующий слог. В противном случае ничего не делать. Каждая нота будет длиться не менее полсекунды, а между нотами будет перерыв не менее четверти секунды.
Используйте представленные здесь музыкальные ноты и следующий текст: (Вертикальные линии представляют разрывы слогов.)
Твин | Кле, Твин | Кле, освещенная звезда,
Как я выиграл, кто ты.
Вверх над миром,
Как бриллиант в небе.
Твин | Кле, Твин | Кле, освещенная звезда,
Как я выиграл, кто ты.
Запись музыки можно найти здесь .
пример
Компьютер слышит средний С и печатает "Твин"
Он слышит еще один средний C и печатает "kle"
Затем он слышит другую среднюю букву С (неправильная нота) и ничего не делает.
Затем он слышит G выше среднего C и печатает «близнец» и так далее.
правила
- Пунктуация должна быть такой, как показано.
- Интервал должен быть таким, как показано (с пробелами и символами новой строки).
- Пробел может быть напечатан вместе с предыдущим или следующим слогом.
Ответы:
Python 3 - Частичное решение (
760742734710705657 символов)(Последнее редактирование; я обещаю)
Это кажется очень, очень, очень трудной проблемой (особенно с учетом того, где начинаются или заканчиваются ноты). Автоматическая транскрипция музыки кажется открытой темой исследования (не то, чтобы я что-то знал об этом). Итак, вот частичное решение, которое не выполняет никакой сегментации нот (например, оно печатает «Twinkle» сразу, когда слышит частоту) и, вероятно, работает только для этого конкретного файла ogg:
Это требует...
Измените значение A = -52 (минимальная амплитуда) в верхней строке в зависимости от вашего микрофона, количества окружающего звука, громкости песни и т. Д. На моем микрофоне менее -57, похоже, воспринимает много посторонних шумов. и более -49 требует от вас играть очень громко.
Это может быть намного больше в гольфе; Я уверен, что есть способы сохранить кучу символов в массиве слов, в частности. Это моя первая нетривиальная программа на python, поэтому я пока не очень знаком с языком.
Я украл код для определения частоты с помощью автокорреляции из https://gist.github.com/endolith/255291
Ungolfed:
источник