PDA

Просмотр полной версии : AY на PC с использованием DLL



Max Savin
04.07.2005, 13:52
Кто нибудь использует в ремейках ZX музыку в формате AY и т.д. с помощью DLL-ок ???

newart
04.07.2005, 19:22
Кто нибудь использует в ремейках ZX музыку в формате AY и т.д. с помощью DLL-ок ???
Таких до недавнего времени не существовало.

Shiru
04.07.2005, 21:13
Я лично написал свой простенький эмулятор AY + плеер PSG (которые Stealth сохраняет). Конечно, звучит хуже AY-emulator'а, но терпимо, и качество можно повысить (я писал, чтобы разобраться, как это делается). Так что не обязательно заморачиваться на чужие dll-ки, эмулятор чипа написать несложно.

Если кому-то нужны мои исходники (на Си) для въезда в тему - могу выложить.

newart
04.07.2005, 22:06
Так что не обязательно заморачиваться на чужие dll-ки, эмулятор чипа написать несложно.
Не обязательно, да, но это однозначно проще.

Max Savin
05.07.2005, 09:25
Выложи-выложи ! Очень интересно посмотреть, кстати у тебя есть исходники AY Emul by Bulba ?!

Max Savin
05.07.2005, 09:36
Да и кстати, почему заморачиваться на чужие DLL-ки, лучше использовать уже готовые решения например winmm.dll или mpeg.dll - проигрывают файлы форматов поддержка коих прописана в Винде с помощью всяких кодеков - гемора просто меньше, чем заново велосипед изобретать. Сделай лучше DLL (или ActiveX) коли ты свой эмулятор чипа на С писал !!! ZX-маны тебе будут благодарны за это, и глядишь Памятник при жизни поставят !!!

Max Savin
05.07.2005, 09:42
Знаю, потому и пытаюсь сделать ремейк своих любимых с детства игрушек Down To Earch (Astradozer) и Boulder Dash. Сейчас делаю движок и логику Astradozer'а. Там музыки конечно не было, но ведь можно взять с других игрушек коих не мало было, игра - бя..., а вот звук - ого-го...

Shiru
05.07.2005, 19:00
кстати у тебя есть исходники AY Emul by Bulba ?!
Может, сходишь к нему на сайт? Исходники AY Emul и Vortex Tracker давным-давно открыты, и лежат там.

Сделай лучше DLL (или ActiveX) коли ты свой эмулятор чипа на С писал !!! ZX-маны тебе будут благодарны за это, и глядишь Памятник при жизни поставят !!!
Не раньше, чем мне самому такое понадобится. А мне не понадобится, я предпочитаю линковать нужный код статически;)

Мои исходы вот. Код эмуляции AY - в ay_emu.h; тест запускается батником.

lavstudio
05.07.2005, 20:47
А вообще обалденно бы было - сделать vst-плагин эмуляции спектрумского звучания.

Shiru
05.07.2005, 20:54
А вообще обалденно бы было - сделать vst-плагин эмуляции спектрумского звучания.
Мне пока не очень ясно, как можно сделать управление AY через midi. Плагин, наверное, должен иметь редактор AYшных инструментов, загрузку-выгрузку их; + полифонию (по чипу на голос, тогда можно сделать условный чип - один тональник, шум, огибающая). Была-бы чёткая концепция...

lavstudio
06.07.2005, 06:06
Мне пока не очень ясно, как можно сделать управление AY через midi. Плагин, наверное, должен иметь редактор AYшных инструментов, загрузку-выгрузку их; + полифонию (по чипу на голос, тогда можно сделать условный чип - один тональник, шум, огибающая). Была-бы чёткая концепция...

1. Делается VSTi. Описание стандарта можно найти в сети. Ключевые слова : Steinberg, VST, VSTi.

2. Да, загрузка/выгрузка инструментов должна быть.
3. Полифония - опциональная. Режим "реальный спектрум" (3 square + 1 noise + 1 envelope) отдельно.
4. Орнаменты. Нужен модуль арпеджиатора, в котором рисуется фактура орнамента. Если на вход пришёл аккорд (2 и более звуков одновременно) - обыгрывается выбранным орнаментом.
5. Поскольку VSTi плагины предназначены для одновременного их использования, с многоканальной (в смысле - несколько миди-входов и несколько шин в микшере) можно не заморачиваться. Человек откроет в секвенсоре такое количество AYEmulator_VSTi, сколько пожелает.

Shiru
06.07.2005, 07:19
3. Полифония - опциональная. Режим "реальный спектрум" (3 square + 1 noise + 1 envelope) отдельно.
Как в этом случае управлять нужными каналами? Т.е., вот есть у нас midi-канал, с сообщениями о начале-конце ноты и её параметрах. И есть три тона, шум, огибающая. Как определить, информация о какой ноте должна управлять тоном, шумом, огибающей? Раскидать на разные midi-каналы? Использовать нестандартные сообщения? Как точно передавать значение шума, частоту огибающей? Или в режиме реального AY (не спектрума, всё-же) - тоже используются AY-инструменты? Всё равно, пока не возникает чёткого понимания, как добиться тех-же (а лучше - более гибких) возможностей управления AY по midi так, как это возможно в AY-трекерах.

4. Орнаменты. Нужен модуль арпеджиатора, в котором рисуется фактура орнамента. Если на вход пришёл аккорд (2 и более звуков одновременно) - обыгрывается выбранным орнаментом.
Т.е., орнаменты - отдельно от инструмента? Как в таком случае выбирать нужный орнамент? Для одновременно пришедших двух и более звуков выбор орнамента не нужен, т.к. можно определить по этим звукам, какой орнамент потребуется (пришло до и ми - значит, 0 и 4). Хотя тут тоже проблема - а если нужен не 0 4, а 4 0?

Есть и более глобальный вопрос. Орнаменты и сэмплы в Спектрумовских AY-трекерах завязаны на частоту прерываний (смена состояния регистров раз в прерывание). В vsti-плагине можно обойти это ограничение (сделать любую частоту смены состояний, что позволит создавать более сложные инструменты). Но непонятно, от чего тогда отталкиваться орнаменту. Видимо, его надо усложнить - задавать не просто смещения в полутонах, но и длительность между каждым таким смещением.

Lounge Lizard
06.07.2005, 12:25
А почему бы просто тупо не забить 5 каналов, что на первых трёх жёстко тон, на четвёртом шум, ну и на последнем огибающая? Единственная непонятка тут будет с огибающей - там же надо ещё сделать что-то типа auto-envelope из ZX-трекеров, чтобы к определённой ноте делалась звучащая "в тему" огибающая. Но "в тему" звучит очень много вариантов(те самые циферки возле "auto-envelope") и у каждого свой тембр... Дык как эти самые варианты переключать? Опять придётся делать нестандартные миди-команды. Ну в порядке бреда - вылавливать из нот аккорды и заменять аккорд на похоже звучащую огибающую. Например отлично помню, что auto-envelope 3:2 звучит похоже на гитарные квинты. :rolleyes:

lavstudio
06.07.2005, 12:25
Как в этом случае управлять нужными каналами? Т.е., вот есть у нас midi-канал, с сообщениями о начале-конце ноты и её параметрах. И есть три тона, шум, огибающая. Как определить, информация о какой ноте должна управлять тоном, шумом, огибающей? Раскидать на разные midi-каналы? Использовать нестандартные сообщения? Как точно передавать значение шума, частоту огибающей? Или в режиме реального AY (не спектрума, всё-же) - тоже используются AY-инструменты? Всё равно, пока не возникает чёткого понимания, как добиться тех-же (а лучше - более гибких) возможностей управления AY по midi так, как это возможно в AY-трекерах.


Делается так. Отойдём от 3-канальности AY, главное - получить "родной" тембр. Плагин имеет 16 миди-входов, что, соответственно, даст 16 сэмплов. В любом секвенсоре можно один и тот же VSTi повесить одновременно на несколько MIDI TRACKs.
Соотвественно - с каждого канала - свой сэмпл.



Т.е., орнаменты - отдельно от инструмента? Как в таком случае выбирать нужный орнамент? Для одновременно пришедших двух и более звуков выбор орнамента не нужен, т.к. можно определить по этим звукам, какой орнамент потребуется (пришло до и ми - значит, 0 и 4). Хотя тут тоже проблема - а если нужен не 0 4, а 4 0?

Есть и более глобальный вопрос. Орнаменты и сэмплы в Спектрумовских AY-трекерах завязаны на частоту прерываний (смена состояния регистров раз в прерывание). В vsti-плагине можно обойти это ограничение (сделать любую частоту смены состояний, что позволит создавать более сложные инструменты). Но непонятно, от чего тогда отталкиваться орнаменту. Видимо, его надо усложнить - задавать не просто смещения в полутонах, но и длительность между каждым таким смещением.


Рисункок орнамента должен показывть последовательный ход обыгрывания. Т.к. вариантов обыгрывания трезвучия до-ми-соль (например), может быть много.
Например,
0
+4
+7
0
+4
+7
и т.д.

или

0
0
+4
+4
+7
+7
и т.д.

или
0
+12
+4
+16
+7
+19
и т.д.

Вот эти рисунки и нужно продумать.

Можно пойти методом, какой используется в некоторых плагинах. Аккорд задаётся в 1-ой октаве, например, а его особенности управляются нотками 4-ой октавы - неиграемыми, но управляющими. (например, по уже расписанной карте орнаментов (которые в плагине пользователь нарисует сам)).






Минимальная временная единица смены ноток в орнаменте должна быть как на спектруме - 1/50 сек. Если делать иначе - потеряется спектрумское звучание.

Shiru
06.07.2005, 13:20
Минимальная временная единица смены ноток в орнаменте должна быть как на спектруме - 1/50 сек. Если делать иначе - потеряется спектрумское звучание.
С этим тоже может быть проблема. Темп композиции не обязательно будет кратный 1/50 секунды, а в этом случае могут неверно отрабатывать орнаменты.

С огибающей пока вообще непонятно. Её ведь отдельно не сделаешь, она должна работать в паре с тональником...


Рисункок орнамента должен показывть последовательный ход обыгрывания. Т.к. вариантов обыгрывания трезвучия до-ми-соль (например), может быть много.
Спасибо за подробное пояснение, но я в курсе:) См. мой 'плагин' orgen для Vortex Tracker (хотя там не очень наглядное редактирование получилось) - http://bulba.at.kz/orgen_v04.7z

lavstudio
06.07.2005, 16:24
С этим тоже может быть проблема. Темп композиции не обязательно будет кратный 1/50 секунды, а в этом случае могут неверно отрабатывать орнаменты.


Главное -- тембр получить нужный. Можно добавить колёсико тонкой настройки частоты. Для 1/50 это уже всё равно будет звучать не как нота отдельно, а как аккорд. По-моему -- не проблема.



С огибающей пока вообще непонятно. Её ведь отдельно не сделаешь, она должна работать в паре с тональником...


А тут всё просто = делать в плагине "соединялки" -- "это звучит с этим". Получается единый тембр. Просто как добавочный осцилятор, и всё.



Спасибо за подробное пояснение, но я в курсе:) См. мой 'плагин' orgen для Vortex Tracker (хотя там не очень наглядное редактирование получилось) - http://bulba.at.kz/orgen_v04.7z

Гляну. Только можно это без 7z выложить? В нормальном зипе?
Или на lav(собakа)lavstudio.com залить.

Shiru
06.07.2005, 23:24
Гляну. Только можно это без 7z выложить? В нормальном зипе?
Или на lav(собakа)lavstudio.com залить.
Это Сергей так выложил, у него почти всё на сайте в 7z... Ок, залил в мыло в zip'е.

Raider
08.07.2005, 11:14
Да и кстати, почему заморачиваться на чужие DLL-ки, лучше использовать уже готовые решения например winmm.dll или mpeg.dll - проигрывают файлы форматов поддержка коих прописана в Винде с помощью всяких кодеков - гемора просто меньше, чем заново велосипед изобретать. Сделай лучше DLL (или ActiveX) коли ты свой эмулятор чипа на С писал !!! ZX-маны тебе будут благодарны за это, и глядишь Памятник при жизни поставят !!!

Ну да, гемора меньше. Как раз в этой мелкософтной требухе, которая на COM построена гемора немеряно. Особенно тем, кто взялся за это в первый раз. Уж поверь.

Гемор в том, чтобы
а) Нужно читать доку чтобы понят ьконцепцию АПИ
б) разобраться и прочитать доку на десятки интерфейсов
в) построить первый stub
г) понять почему не работают некоторые программы и пофиксить баги (подсказка - не все так просто, многого ты не знал, а оно на самом деле было)