Как я понял, что музыкальный тренажёр должен дружить с духовым MIDI-контроллером

В прошлой статье я рассказывал про очередную свою затею. Решил научиться играть на музыкальном инструменте. Нормальный человек в такой ситуации покупает инструмент, открывает учебник или идёт к преподавателю.
Я же решил сначала написать программу, которая будет меня учить.
Почему просто, когда можно сложно?
В итоге появился прототип музыкального тренажёра. Он уже умеет показывать ноты, аппликатуру блокфлейты, клавиши пианино, гитарный гриф, проигрывать MIDI-файлы и постепенно превращается из маленького эксперимента во что-то гораздо большее.
И вот тут возникла главная проблема.
Как программе понять, что человек действительно сыграл правильно?
Первоначальная идея была очевидной: микрофон.
Человек играет — программа слушает звук, определяет частоту, сравнивает её с нужной нотой и говорит примерно следующее:
«Нет, дружок. Это должна была быть Соль. А то, что сейчас прозвучало, мы пока музыкальной нотой называть не будем».
В теории всё красиво.
На практике начинается цирк.
Микрофон слышит комнату. Слышит компьютер. Слышит отражения звука. У духового инструмента есть основная частота и куча обертонов. Добавляем сюда дыхание начинающего музыканта, неидеальную атаку ноты — и алгоритму приходится не столько слушать музыку, сколько гадать, что именно сейчас пытался изобразить человек.
Решаемо? Конечно.
Но чем дальше я копал эту тему, тем сильнее возникал вопрос: а зачем я вообще пытаюсь заставить компьютер угадывать то, что инструмент может сообщить ему напрямую?
И вот здесь я наткнулся на духовые MIDI-контроллеры.
И немного завис.
Оказывается, инструмент может сам всё рассказать
До этого MIDI у меня в голове в основном ассоциировался с клавишами: нажал клавишу — компьютер получил номер ноты, силу нажатия и что-нибудь с этим сделал.
А тут выясняется, что существуют электронные духовые инструменты и контроллеры, которые способны передавать данные об игре непосредственно компьютеру.
То есть вместо схемы:
человек → инструмент → звук → микрофон → анализ → попытка угадать ноту
можно получить:
человек → MIDI-контроллер → точные данные → программа.
И вот это уже интересно.
Потому что программа больше не пытается угадать, что произошло. Она получает событие: сыграна такая-то нота, в такой-то момент, с такими-то параметрами.
А если конкретный контроллер передаёт ещё и данные дыхания — становится совсем весело.
Я ведь первоначально хотел научить программу слушать музыканта.
А оказалось, что можно заставить инструмент разговаривать с программой.
И это немного меняет весь проект.
А вот здесь появилась новая проблема
Сначала я обрадовался и подумал: всё, теперь тренажёр будет знать буквально положение каждого пальца.
А потом начал разбираться внимательнее.
И нет. MIDI — не телепатия.
Если контроллер передал программе ноту Соль, программа прекрасно знает, что получена Соль. Но это ещё не означает, что устройство обязательно рассказало ей: первый палец лежит здесь, второй здесь, третье отверстие закрыто, четвёртое открыто.
У разных контроллеров возможности разные.
И вот здесь начинается уже нормальная инженерная работа: выяснить, какие данные реально отдаёт конкретное устройство и насколько глубоко к ним можно добраться.
То же самое касается дыхания. Возможность передавать breath/expression есть у многих духовых MIDI-контроллеров, но нельзя заранее написать для любого устройства: «CC#2 — и вопрос закрыт».
Поэтому теперь моя задача немного изменилась.
Мне нужен не просто электронный духовой инструмент.
Мне нужен контроллер, который отдаёт максимум полезной информации для обучения.
Ну и куда меня опять занесло?
Вот что мне особенно нравится во всей этой истории.
Начиналось всё примерно так:
«Хочу научиться играть на блокфлейте».
Потом:
«А напишу-ка я себе маленький тренажёр».
Потом:
«Хорошо бы он слушал микрофон».
Теперь:
«Так, какие данные отдаёт электронный духовой MIDI-контроллер и нельзя ли на этом построить полноценную систему обучения?»
Чувствую, ещё несколько таких шагов — и вместо блокфлейты у меня случайно появится небольшой образовательный стартап.
Но пока никаких громких слов.
Следующий этап вполне приземлённый: взять реальное устройство, подключить его к прототипу и посмотреть, какие данные я действительно смогу получить, а не какие красиво выглядят на бумаге.
Потому что именно на этом месте обычно заканчиваются прекрасные идеи и начинается инженерия.
Если получится — покажу результат.
Если не получится — тем более покажу. Иногда статья о том, почему хорошая идея не заработала, гораздо полезнее статьи «посмотрите, какой я молодец».
А играть я когда-нибудь всё-таки начну.
Наверное.
Tux Linux
Поддержать автора
- номер счёта/карты
- 2204 3201 5444 9864
- получатель
- Боев Федор
Комментарии 0
Войдите, чтобы оставить комментарий.
Будьте первым, кто прокомментирует эту запись.