Свежие обсуждения
Микроконтроллеры

Как подготовить нотные данные для полифонии

1 2

В продолжение тем:
http://www.pro-radio.ru/controllers/4566/ (Трёхголосный тон-генератор)
http://www.pro-radio.ru/controllers/2669/ (Как с помощью PIC12C50X воспроизвести мелодию???)

С одноголосными мелодиями все понятно -- достаточно выдрать солирующую дорожку из какого-нибудь midi-файла, а вот как быть с полифонией?

Меня неоднократно подмывало хранить первоисточник (mid-файл) в первозданном виде, но возникают огромные трудности не с синтаксическим разбором формата, а с боле-менее сносной интерпретацией данных (распределением нот по тон-генераторам). Корень проблемы -- "богатый" исходный midi файл и ограниченные по возможностам конечные устройства (варианты с готовыми микросхемами wavetable-синтеза -- ясное дело -- не рассматриваем!).

Эту задачу я не решил и продолжаю использовать различные упрощенные форматы хранения данных, которые просто тупо воспроизводятся. А вся работа по адаптации выполняется вручную. Например, открываю исходный midi файл, выкидываю оттуда все лишнее, перераспределяю нотные последовательности по нескольким каналам (по количеству тон-генераторов в конечном устройстве), преобразую в свой формат, загружаю в мк, слушаю, корректирую. Цепочка проб-ошибок. Одним словом - гемор.

В итоге набор мелодий полуается скудный (процесс быстро надоедает).

Gregory и остальные, работающие над созданием различных "музыкальных шкатулок"!
Кто как готовит и кодирует музыкальные данные для своих устройств? Ваши мысли на эту тему?

ПС.
Мой "тупой " формат (для устройств из нескольких ШИМ-генераторов) такой:
1-ый байт: 0ooo nnnn -- ooo - номер октавы (0...7), nnnn - номер ноты (1...12), неиспользуемые коды зарезервированы под команды
2-ой байт: 1qqq gggg -- qqq - громкость ноты, реализуется с помощью ШИМ (0...7), gggg - номер генератора (например, 0...9)
3-ий байт: 1ddd dddd -- задержка (0...127, что соответствует количествам длительности "1/64" ноты)
4-ый байт (необязательный): 1ddd dddd -- дополнительные 7 старших бит задержки (если предыдущих 7 бит не хватает)

 

Ну, свой формат хранения данных у меня расписан на сайте. Вкратце, то самое тупое разделение по партиям (генераторам). У меня записаны только нота и длительность.
Подготовку осуществляю в Кейволке. Делаю трёхголосный миди-файл, что б звучал (для каждого голоса использую оргАн, так как он ближе по звучанию к моему девайсу). Потом только "конвертирую" ноты в "машинный код".

IDiod:
gggg - номер генератора
ИМХО, лишнее. Если у Вас партии разделены, то каждая и так идёт на свой генератор, а если у Вас всё сплошным потоком, то девайс сам должен уметь распределять по свободным генераторам. У меня, в варианте с мелодиями в памяти - первый вариант, а в с управлением по МИДИ - второй.

 

У меня данные идут сплошным потоком, номер генератора введен по двум причинам -- для упрощения программы мк (по крайней мере, на начальном этапе) и, так сказать, на перспективу, когда захочется сделать несколько тембров (уже сейчас задумываюсь над введением ударных: без них попса -- не попса ).

В любом случае для подготовки данных требуется программа-конвертер, вот пусть она и делает всю работу по распределению. Еще один резон такого решения -- отладить алгоритм на "большом" компьютере легче и быстрее. К сожалению, программу-конвертер хочется бесконечно совершенствовать, вводить новые возможности и постепенно исключить ручной труд -- а это означает написание своего Кейкволка . Разумный компромисс я еще не нашел.

Сегодня несколько часов потребовалось на "ручную" адаптацию 3-х произведений из 3-х различных жанров. У меня полифония 6 голосов и чувствую, что когда перейду на 12, то будет полная "труба". Легче всего пошла классика, затем -- детская песенка, самое сложное -- это как раз "попса".

 

IDiod:
то будет полная "труба"
Это от алгоритма зависит. Я, вот, свой приблизил к нотной записи (кстати, там, у меня и знаки повтора используются, что позволяет память экономить, так что не такой уж он и тупой), поэтому особых проблем нет, но всё-равно, конечно, муторно. Автоматический конвертер не помешал бы.

А что Вы там такое изготовили? Поделитесь с народом. У нас ведь, и про вэйв-тэйбл ветка есть: http://www.pro-radio.ru/controllers/4632/

 

Да знаю я, читал в свое время.

Gregory: А что Вы там такое изготовили?
Пока просто кусок кода, исполняющий мелодии.

Команды повторения тоже буду использовать, плюс команды проигрывания блоков-"подпрограмм" (с возможностью вложенности).
Этот проект -- ремейк моих давних "забав" на БК-0010, только для CY8C29443.

 

В тему?
http://www.microchip.su/showthread.php?t=4685

 

poruchik:
В тему?
Не-а. Это опять-таки, для http://www.pro-radio.ru/controllers/4632
А по сабжу там только:
Ну это видимо пока что только ручками, открываете Guitar Pro, PowerTab или Portable Digital Music Mentor и переписываете сверяя длительности и диапазон.

 

Gregory: Я, вот, свой приблизил к нотной записи
Нечто подобное видим и в poruchik: http://www.microchip.su/showthread.php?t=4685

Какой смысл так делать? Только для того, чтобы легче было набирать ноты вручную?
А "вычленение" повторяющихся фрагментов -- это еще тот труд... Имеет смысл только когда уж очень поджимает память.

Все-таки оптимум -- 3-4 голоса при условии хорошей аранжировки. 6 голосов -- звучание через некоторое время кажется утомительным.

 

IDiod:
это еще тот труд
Как-раз, при таком способе записи, и не особо. Если партитуру готовую передираете, то вообще - лафа, а если с мидюка "снимаете", то, в том же КейкВолке очень наглядно можно увидеть повтор.

 

рекомендую посмотреть как "этот" японец умудрился (головастый чувак) Wavetable Melody Generator http://elm-chan.org/works/mxb/report.html