Просмотр полной версии : Полифоническая музыка на РАДИО-86РК
Alikberov
18.12.2023, 12:12
С первого знакомства с трилогией игр SAVAGE был потрясён их мощным музыкальным оформлением на заставках.:v2_dizzy_heart:
И всегда мечтал сделать нечто подобное и на своём РАДИО-86РК / КР-03.
В качестве примера - вот ссылка на онлайн эмулятор (https://rk86.ru/?file=https://gist.githubusercontent.com/Alikberov/7c24a6f3f74105fd33e55fa823968973/raw/8188e4405f48d7ab547a3651d3e0d755e78382c9/savage_3.json) с загруженным в память треком SAVAGE#3.
(Не забудьте в онлайн-эмуляторе заранее галочкой разрешить воспроизведение звука.)
Конечно, до оригинала ему далеко.:v2_dizzy_coder:
http://www.youtube.com/watch?v=DalLKqdvD0k
И, собственно, сам образ (32 Кб) .rkr-файла для загрузки.79941
собственно, сам образ
Собственно в эмууляторе EMU вообще не заработало, а в Emu80 - загружается и даже играть пытается, но несколько быстро??
Alikberov
18.12.2023, 13:53
в Emu80 - загружается и даже играть пытается, но несколько быстро??В конфигурации Emu80 попробуйте поправить конфигурацию:
# Тактовые частоты
@CPU_FREQUENCY = 1333333 # 1777777 # ВМ80, ВИ53, ВТ57
@CRT_FREQUENCY = 1333333 # ВГ75Пока не понимаю, почему так получилось (всё расчитывал по тактам, исходя от частоты в 1,777777) и буду выяснять.
Основной задачей было лишь сконвертировать ASC-трек Vortex-плеером в текст и заставить РАДИО-86РК его проиграть хоть как-нибудь программными DI/EI-средствами (без ВИ53). Собственно, всё упирается в точность потактовых расчётов временных интервалов для всех циклов - известное дело.
У меня и в Emu и в Emu80 играет, но и там и там получаются совсем не те ноты. Тайминги команд 8080 в обоих эмуляторах давно проверены, а вот насчет онлайнового есть сомнения.
- - - Добавлено - - -
В принципе нормальное (без заметной фальши) воспроизведение 3-х голосой музыки на РК-подобных вполне возможно (https://zx-pk.ru/threads/30104-muzykalnaya-sistema.html).
Alikberov
18.12.2023, 14:45
У меня и в Emu и в Emu80 играет, но и там и там получаются совсем не те ноты. Тайминги команд 8080 в обоих эмуляторах давно проверены, а вот насчет онлайнового есть сомнения.Собственно, вся разработка кода производится именно в онлайн-эмуляторе.
Но, расчёт тактов - формулой 16 МГц / 9 ГФ24 / Такты_Команды.
В принципе нормальное (без заметной фальши) воспроизведение 3-х голосой музыки на РК-подобных вполне возможно (https://zx-pk.ru/threads/30104-muzykalnaya-sistema.html).Собственно, с изучения кода "Музыкальной Системы" я и начал, написав с десяток собственных вариантов. Правда, количество тактов при таком подходе получается около 200, что не даёт достичь 9 кГц. При этом, громкость звука получается очень тихой и звук - слишком "мягкий".
Представленный выше вариант - шаг в сторону от алгоритма "Музыкальной Системы" в сторону "агрессивного арпеджио", что даёт довольно громкий звук и частоты около 20 кГц.
CityAceE
18.12.2023, 14:57
И, собственно, сам образ
Исходников не будет?
Собственно, с изучения кода "Музыкальной Системы" я и начал, написав с десяток собственных вариантов. Правда, количество тактов при таком подходе получается около 200, что не даёт достичь 9 кГц.
В muz_syst_fast_big.rk частота дискретизации 17352 Гц, но я считаю, что точность нот гораздо важнее и в двух других вариантах она обеспечивается, хотя частотой дискретизации пришлось пожертвовать.
Alikberov
18.12.2023, 15:53
В muz_syst_fast_big.rk частота дискретизации 17352 Гц, но я считаю, что точность нот гораздо важнее и в двух других вариантах она обеспечивается, хотя частотой дискретизации пришлось пожертвовать.У меня код проигрывания нот никаких расчётов по таблицам не производит.
Всё зависит от другого кода - JavaScript-конвертора из Vortex-паттернов текстового формата (Open ModPlug Tracker копирует все паттерны в буфер обмена в текстовом представлении) в величины для таблиц нот моего кода.
И тут я ещё глубоко не разбирался. Возможно, номер октавы неверно интерпретируется.
В отличии от "Музыкальной Системы", никакой предварительной компиляции код не производит и занимает чуть более 300 байтов (можно и до 200 сократить, но я развернул некоторые ветки и продублировал фрагменты, чтобы выиграть местами критические 10 тактов) и регенерация памяти производится самим процессором (без POP) линейностью кода (почти за месяц поисков оптимальных вариантов, перешёл к такой тактике).
P.S.: Буквально, позавчерашний вариант 79942 воспроизводил два голоса + один произвольный семпл (до 2048 бит).
Alikberov
21.12.2023, 21:13
Исходников не будет?Зачем исходники, когда есть дизассемблер и отладчик?
Чтобы оценить стиль листинга?:v2_dizzy_coder:
Полностью переписал весь код на три голоса с циклом в 100 тактов, сделав звук несколько громче.
Против ZX-Spectrum с его тактовой частотой и командами Z80, на К580ВМ80 с известной частотой РАДИО-86РК довольно сложно соревноваться в музыкальном творчестве.:v2_dizzy_facepalm:
Вот, ещё промежуточный вариант, разрабатываемый в данный момент.
79950
Введён выход в Монитор по нажатию любой клавиши в конце каждого паттерна
Начало мелодии с адреса 0x1000
Паттерны располагаются по адресам, кратным 256 байтам, с адреса 0x1100
Список порядка воспроизведения паттернов - 0x10C0..0x10FF
Ссылка на паттерн указывается теперь индексом, а не адресом
Цикл воспроизведения теперь можно замкнуть в бесконечность, указав вместо индекса паттерна (0x01..0x65) позицию в списке порядка воспроизведения паттернов (0x80..0xFF)
Собственно, сам конвертор: 79951
Alikberov
22.12.2023, 03:16
Итак, с помощью несложного скрипта (79952) удалось почти в автоматическом режиме получить 79953:v2_dizzy_punk:
CityAceE
22.12.2023, 08:59
Чтобы оценить стиль листинга?
Да нет, всего лишь, чтобы с минимальными усилиями запустить это на Специалисте ;)
Alikberov
22.12.2023, 18:01
Доработал свой HTML-скрипт конвертора.
Открываем любую мелодию в Vortex Tracker
Экспортируем её в текстовый формат
Загружаем в конвертор
Получаем готовый RKR-файл
Если раньше на конвертацию, больше всего ручную, уходили часы! То сейчас - менее одной минуты.
Правда, ещё предстоит разобраться с темпом и октавами в конверторе.
Вот, например, как звучит Арканоид: 79954
Если углубляться и делать всё на высоком качественном уровне, необходимо учитывать орнаменты и семплы, где я вообще не в курсе на данный момент.
Да нет, всего лишь, чтобы с минимальными усилиями запустить это на Специалисте ;)Но ведь Специалист не вырабатывает звук командами DI/EI?;)
Если углубляться и делать всё на высоком качественном уровне, необходимо учитывать орнаменты и семплы, где я вообще не в курсе на данный момент.
Может быть поможет конвертер и плеер DenisGrachev-а, там можно подсмотреть что делается с орнаментами и семплами -- https://github.com/DenisGrachev/vt2vi53
Alikberov
22.12.2023, 22:53
Собственно, если кому интересно, выкладываю исходный текст код 79956 на ассемблере с некоторыми комментариями.
Каждая строчка прокомментирована с указанием количества тактов. Такты с точкой указывают на то, что команда стоит лишь для задержки.
В частности, указаны такты от инструкции EI до DI, которые формируют разную скважность генерирумого меандра, что позволяет достичь ШИМ-эффекта для модуляции амплитуды.
Код достаточно прост и состоит из однотипных фрагментов для озвучивания различного состава "голосов".
В отличии от "Музыкальной Системы", код не модифицирует сам себя, перезаписывая в циклы JMP/JNZ для обхода "молчащих" голосов, а прыгает в соответствующий цикл. Это позволит, в перспективе, запускать код прямо в ПЗУ.
Данный вариант кода поддерживает строгие 100 тактов на цикл практически везде, где только возможно, что гарантирует также и стабильный темп проигрывания. Счётчики работают на инкремент, чтобы высокие частоты соответствовали высоким значениям счёта.
Alikberov
24.12.2023, 17:31
Записал видео специально для просмотра с любого устройства:
http://www.youtube.com/watch?v=okNVa0Jhtic
http://www.youtube.com/watch?v=0l-uo9qO5HY
http://www.youtube.com/watch?v=0yn2l9IBHZs
И немного классики:
http://www.youtube.com/watch?v=lLPA3SN8o0g
Alikberov
25.12.2023, 00:00
Наткнулся на 1tracker (https://habr.com/ru/companies/ruvds/articles/745710/), откуда узнал про Beepola (https://speccy.info/Beepola) и сделал для себя открытие!
Из игры Savage (https://speccy.info/Savage). Оригинальный код разработан Jason C. Brooke и использовался в ряде игр компании Probe. Два тональных канала, длительость нот фиксирована, изменяемая скважность, слайды. Пять ударных инструментов, прерывающих звук. С помощью слайдов и комбинирования каналов можно получить дополнительные звуки ударных.Дело в том, что неделями ранее я писал код на два голоса полифонии + сэмпл с любой формой. При этом, сэмпл воспроизводился как третий голос. Всё это вымотало мне много нервов, так число тактов на одну итерацию полифонии переваливало за 200!
(Для сравнения, нынешный код укладывается тремя голосами ровно в 100 тактов!)
То есть, нужно снова написать весь код с нуля именно на два голоса, убрать из трека байт о длительности нот (сейчас каждая строчка паттерна имеет свой байт длительности).
Иначе говоря, при написании кода я поставил себе достаточно высокие требования. Хотя, для воспроизведения оригинальных треков Savage хватит и меньшего.
А учитывая разницу в частотах процессоров РАДИО-86РК и ZX-Spectrum, задача была слишком трудоёмкой для меня.
P.S.: В общем, как-то так...
Alikberov
25.12.2023, 13:27
Кое-как добавил таймер (Счёт паттернов : Счёт строк), а также и заголовок файла, не нарушив качество воспроизведения.:v2_dizzy_punk:
http://www.youtube.com/watch?v=njqj8DdMbek
Alikberov
25.12.2023, 22:00
http://www.youtube.com/watch?v=qnRJaXygJVU
CodeMaster
26.12.2023, 10:20
"Final Countdown"
Это секундомер, слева вверху? У меня он жутко быстро бежит на этом видео (ну, и музыка также).
Alikberov
26.12.2023, 19:07
Это секундомер, слева вверху? У меня он жутко быстро бежит на этом видео (ну, и музыка также).
Кое-как добавил таймер (Счёт паттернов : Счёт строк), а также и заголовок файла, не нарушив качество воспроизведения.:v2_dizzy_punk:По тому и скорость счёта зависит от темпа.
Alikberov
30.12.2023, 13:51
Попытался сконвертировать GOLDEN.MOD (http://modarchive.org/index.php?request=view_by_moduleid&query=43971)
http://www.youtube.com/watch?v=d59rKplN1Bc
И ARYX (http://modarchive.org/index.php?request=view_by_moduleid&query=191789)
http://www.youtube.com/watch?v=6YLvOpYw-d8
Alikberov
31.12.2023, 00:06
Обновил ядро генерации звука и сделал его заметнее громче
http://www.youtube.com/watch?v=yRCd9wDz9EQ
(К сожалению, до перкуссии пока руки не доходят)
Alikberov
31.12.2023, 21:35
К грядущему часу
http://www.youtube.com/watch?v=MTefg4E077M
Собрал всё в отдельный отдельный плейлист (https://www.youtube.com/playlist?list=PLVZcbkNi2D_gPt4lZhKQ_fSCcx1Nz4sOw).
Что-то с длительностями нот. Не обижайтесь, но это тот самый случай, когда много - не есть хорошо.
Что-то с длительностями нот.
А частоты/высоты не смущают, только длительности?
Alikberov
01.01.2024, 17:11
А частоты/высоты не смущают, только длительности?Легко прикинуть, что при частоте процессора в 1,777,777.777 Гц и ровной сотни тактов на итерацию, самая высокая частота будет в 17,777.777 Гц, откуда делением получаются все остальные.
В трекерной музыке формата .MOD частота семплирования обычно имеет 8363 Гц. Причём, сам семпл также имеет свою длину, огибающую и соответствующую длительность.
Тем самым, нота G#5 уже не может означать конкретно тон ноты Соль-Диез Пятой октавы, а означает, что нужно проигрывать конкретно данный семпл именно на частоте указанной ноты.
То есть, необходимо более детально разбирать все играющие семплы и учитывать ещё их циклы, чтобы продолжать их звучание дальше.
Вы же сами понимаете, на сколько сложно это всё делать и одним проходом со сквозной конверцией нот с паттерна S3M в таблицу коэффициентов деления даже на тот же ВИ53 - никак не сделаешь!
Идеально - конвертировать МИДИ: Сконвертировать SAVAGE.PT3 в формат SAVAGE.S3M и затем в MIDI - слишком сложная цепочка и готовых инструментов нигде нет!
А вот длительности - я ставлю на глаз, так как ModPlug Tracker имеет также свои нюансы - Tempo и Speed могут изменяться на каждой ноте, что требует ещё разбора колонки эффектов.
ivagor, мне слон на ухо наступил, поэтому тут я вообще не лезу )
В любом случае, я никоим образом не осуждаю. Наоборот, очень интересно.
Alikberov
02.01.2024, 14:08
ivagor, мне слон на ухо наступил, поэтому тут я вообще не лезу )
В любом случае, я никоим образом не осуждаю. Наоборот, очень интересно.
Конкретно под РАДИО-86РК публиковалось две музыкальные программы:
Музыкальная система (http://archive.radio.ru/web/1988/10/026/) от Sol20 (https://www.sol20.org/index.html)/Altair (https://altairclone.com/music_system.html)
Музыкальный редактор (http://archive.radio.ru/web/1989/08/039/) на Бейсике для К580ВИ53
Про "трекерное направление" вообще говорить нечего: Сам классический РАДИО-86РК - не про графику и музыку.
У меня музыкального образования и слуха нету. Просто попытался, как мог, сделать свой трекерный плеер конкретно под РАДИО-86РК без каких-либо доработок, Just must to be.
Если кто-то сможет лучше и качественнее - пожалуйста!
Мой вариант конверсий на РК пары SAVAGE. В ноты более-менее попадают, но качество звука плохое. Играют зацикленно, выход в монитор - АР2 (Esc).
Автор оригинальной музыки (бипер) - David Whittaker
Автор AY кавера - Андрей Сендетский (ASC)
Upd 08.01.2024: v2 - чуть лучше качество и чуть точнее ноты.
Upd 09.01.2024: v3 - убрал мерзкие фоновые потрескивания, теперь можно слушать без особого отвращения.
v4 - бас в savage3.rk теперь похож на savage3.asc. savage1 без изменений, как в v3
Alikberov
07.01.2024, 14:57
Попытался написать скрипт для быстрой конвертации модульных треков.
80049
Конечно, работает не идеально и расчёт темпа сбоит, коэффициенты нот очень фальшивят. Но как пробный конвертор - вполне годится.
В архиве вариант плеера с перкуссией.
Конвертируемые мелодии в заголовок добавляют кучу управляющих F1/F3 кодов ВГ75, чтобы максимально разгрузить процессор от циклов ПДП.
Из-за чего вся информация отображается в три кадра и всё сильно мерцает: Это не так плохо, чем наблюдать совсем чёрный экран.
(Если по адресу 005F код 32 заменить на 3A, ПДП не запустится и звук будет чище)
Мой вариант конверсий на РК пары SAVAGE. В ноты более-менее попадают, но качество звука плохое. Играют зацикленно, выход в монитор - АР2 (Esc).
Автор оригинальной музыки (бипер) - David Whittaker
Автор AY кавера - Андрей Сендетский (ASC)Ваш вариант, безусловно, звучит богаче!
Я до сих пор не могу найти способ реализовать нормальную перкуссию, а у Вас она звучит!
Однако, на моём КР-03 с 16 Кб ОЗУ это просто не запустится: Ваши файлы превышают 14 Кб.
Заменил на v2 (https://zx-pk.ru/threads/35453-polifonicheskaya-muzyka-na-radio-86rk.html?p=1191756&viewfull=1#post1191756).
Для ударных просто воспроизводится соответствующая тональная составляющая из .ASC файла. Шумовую часть барабанов на векторе сделал, но на РК это вряд ли возможно.
Долго тупил, но в итоге исправился (v3 (https://zx-pk.ru/threads/35453-polifonicheskaya-muzyka-na-radio-86rk.html?p=1191756&viewfull=1#post1191756)).
Alikberov
09.01.2024, 20:23
Доработал код 80075 с разными режимами запуска:
G1..G5 - Запуск в режиме 1-5
G6 - Запуск без ПДП
G7 - Запуск с ПДП
Собственно, директива G1..G5 запускает плеер в одном из пяти режимах длительности EI-DI импульса.
Вот видео для оценки звучания (в дампе - весь код / 843 байта):
http://www.youtube.com/watch?v=kISDXgzhkLw
Надеюсь последняя правка (v4 (https://zx-pk.ru/threads/35453-polifonicheskaya-muzyka-na-radio-86rk.html?p=1191756&viewfull=1#post1191756)) и я больше не буду сюда вторгаться.
Alikberov
09.01.2024, 21:20
Надеюсь последняя правка (v4 (https://zx-pk.ru/threads/35453-polifonicheskaya-muzyka-na-radio-86rk.html?p=1191756&viewfull=1#post1191756)) и я больше не буду сюда вторгаться.Это чем я Вас так обидел?
На РАДИО-86РК и так музыкальных кодов - кот наплакал!
Нужно заполнить пробел: Если не трекер, то универсальный удобный плеер разработать.
Никаких обид, я доделал примеры и если там не найдутся ошибки, то на этом могу закруглиться.
Alikberov
09.01.2024, 22:26
Никаких обид, я доделал примеры и если там не найдутся ошибки, то на этом могу закруглиться.Ну, у нас немного разные подходы.
Вы, как я понял, исходную мелодию в AY-формате проигрываете в потоке. А это отнимает много памяти (в мои 16 Кб не загрузится).
Я же пытаюсь проигрывать сами паттерны построчно, конвертируя их из исходного PT3-формата. Что память экономит (в 16 Кб вмещается) и игру "ПИТОН" можно взбодрить такой музыкальной заставкой.
Но у меня большие проблемы с самим понятием теории звука и даже чудо то, что у меня хоть что-то как-то узнаваемо звучит.
Конкретно эти два примера можно утрамбовать в 16 Кб, просто не вижу в этом смысла.
Alikberov
15.01.2024, 16:42
Конкретно эти два примера можно утрамбовать в 16 Кб, просто не вижу в этом смысла.Дело в том, что ZX-Spectrum не использует один только ШИМ для смешивания голосов.
Например...
https://www.youtube.com/watch?v=4wpg5p-8sWQ
На слух звучит как "Музыкальная Система" РАДИО-86РК - используются "иглы" на нотных интервалах счёта. Частота достаточно высокая, но звук - заметно тише.
В этом я уже немного разобрался и достиг оптимального звучания по громкости и мягкости.
https://www.youtube.com/watch?v=TymO0Lj7Vp8
На слух звучит как тот же оператор BEEP у Бейсика - тон чистый. Используются традиционные меандры (по-видимому).
Здесь я ещё не разобрался.
https://www.youtube.com/watch?v=IR1TWDocL_M
Вот тут всё несколько сложнее, так как присутствует и тональный ШИМ, и семплы.
Здесь у меня совсем всё сложно: Все ШИМ-варианты на четыре уровня у меня звучат просто несносно...
(Я не использую готовый поток, конвертированный с AY, а генерирую два тона прямо в ШИМ-цикле, что экономит память.)
Alikberov
16.01.2024, 18:20
К этому моменту удалось чуточку продвинуться вперёд и добиться громкого меандра двух голосов.
К сожалению, слышен некий треск, который пока не удаётся побороть. Однако, по звучанию уже ближе к музыкальному редактору WHAM!
80112
При этом, сам код занимает 700 байтов.
(Проигрывание - по директиве G0; Запуск по G7 изменяет режим "ПДП вкл./выкл."; Режимы G1-G6 имеются, но в данном варианте не рекомендуются.)
Вот так сейчас звучит и Арканоид: 80113
Alikberov
17.01.2024, 21:45
Попытался сделать набросок редактора нотных партитур в привычном для музыкантов стиле.
80124
Управление:
Стрелки Влево/Вправо - навигация по позиции партитуры
Стрелки Вверх/Вниз - изменение высоты ноты первого голоса
Клавиши F1/F3 - изменене высоты ноты второго голоса
Клавиша F4 - копировать текущий столбец далее
Клавиша ЗАБОЙ - очистка столбца
Клавиша ПРОБЕЛ - проигрывание партитуры
Кравиша АР2 - возврат в Монитор
Клик "световым пером" (мышь эмулятора) - изменение высоты ноты
http://www.youtube.com/watch?v=asRKhfhBr8M
Alikberov
21.01.2024, 20:43
https://www.youtube.com/watch?v=DJxaauisYXI
Tab - переход по "голосам"
Забой - очищение
Пробел - копирование
АР2/Esc - Выход
Влево/Вправо - навигация
Вверх/Вниз - на полутон выше/ниже
Enter/ВК - Проигрывание
Alikberov
28.01.2024, 15:19
Много часов уделил точности отображения нот:
Добавил изображение "скрипичного ключа"
Расположил ноту Соль на соответствующей позиции (согласно "ключу")
На слух подкалибровал смещение частотной таблицы онлайн генератором (https://www.szynalski.com/tone-generator/)Управление:
Табуляция - выбор голоса (тонкий пунктир / жирный пунктир)
Вверх/вниз - высота ноты выбранного голоса
Влево/вправо - позиция редактирования
Пробел - копирование ноты на активном голосе
F4 / УС+C - копирование блока (восемь нот)
F1 / F2 - выбор режима проигрывания ("сквозной" без кеша / "буферный" с кешем)
ВК - Запуск проигрыванияСобственно, режимы F1/F2 пока экспериментальные по анализу "щелчков" между выборками нот в цикле ШИМ-генерации.
P.S.: До "ударников" и даже "пауз" всё ещё руки не доходят: Все усилия направляются на чистоту частот.
Alikberov
06.05.2024, 14:25
Конечно, не натуральный программный синтез, а лишь ШИМ-поток прямо с файла SD-Карты.
И специально на Апогее проверил код воспроизведения.
http://www.youtube.com/watch?v=mXEbrX-yHZ8
Условное расширение файлов - RAU (Raw RK Audio), так как MUS/RAW/SND/WAV - совсем не вписываются по технологии.
Соответственно, утилита VIEW.RK (универсальна: может работать за EDIT.RK тоже) помещается в папку /BOOT/ и вызывается клавишей F3 в оболочке, запуская соответствующий код /BOOT/VIEW/RAU.RK для просмотра конкретного формата.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot