понедельник, 12 сентября 2016 г.

Очень странная тема - 2, или Dexed VSTi vs. JuceOPLVSTi

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

Короткий ответ: нет.

А теперь длинное пояснение, почему именно.

Архитектурные особенности

Самым старым и знаменитым FM-синтезатором - профессиональным, серийно производившимся, - является Yamaha DX-7. На самом деле, в этом инструменте - внезапно - используется не столько частотная, сколько фазовая модуляция, но это к делу относится лишь постольку-поскольку. Что имеет существенное значение, так это архитектура DX-7: шесть источников звуков ("операторов"), взаимодействующие друг с другом по определённым алгоритмам и таким образом формирующие сложные волноформы, Каждый оператор регулируется собственной огибающей, есть встроенные LFO, но нет ни фильтров, ни эффектов.

Микросхемы YM3812 (OPL2) или YMF262 (OPL3) работали совершенно по иному принципу, хотя в основе - тот же FM-синтез. Разница наглядно представлена на нижеприведённом скриншоте.



Это JuceOPLVSTi, VST-инструмент, в основе которого лежат те же алгоритмы эмуляции чипов OPL2, что и в DosBox; исходим из того, что эмуляция достоверна.

Как видим, у нас тут только два оператора, но они способны производить сразу множество - я бы даже сказал, неожиданное множество разнообразных волноформ. В то время как операторы DX-7/Dexed могут генерировать только синусоидные волны (у Dexed, заметим, есть LFO, который выдаёт и другие формы волн).

Мало того, помимо алгоритма частотной модуляции может использоваться - на выбор пользователя - аддитивный алгоритм.

Таким образом, надежда "по-быстрому" воспроизвести в Dexed "похожий" звук истаяла как майский снег: слишком разные инструменты.

Это это, впрочем, не делает всю затею неосуществимой в принципе.

Дальше - для гиков и полугиков

Что нам нужно? Во-первых, оригинальный или близкий к оригиналу MIDI-файл, во-вторых, более-менее подходящие тембры. Настройки тембров (или, точнее будет сказать, описания характеристик инструментов) для AdLib и SoundBlaster хранились в форматах INS и SBI, соответственно.

Как раз вместе с JuceOPLVSTi предлагается огромное количество тембров в формате SBI, благо этот плагин читает их и даже позволяет экспортировать. Часть этих инструментов как раз извлечена из Dune II.

В Сети также можно найти некоторое количество MIDI-файлов, выдранных непосредственно из игры. Каким именно образом выдранных? Например, с помощью утилиты DRO2MIDI.



Это утилита, которая позволяет экспортировать данные в формате DRO (DosBox Raw OPL), IMF (id Music Format) или RAW в MIDI.


Сам по себе DRO - это довольно экзотический формат, используемый только в DOSBox, - судя по описанию, разработчики DOSBox разработали его для перехвата/записи "сырых" команд, которые программы (игры) отправляют OPL2/OPL3-совместимым звуковым устройствам, т.е. AdLib и SoundBlaster: структура тембров, высота нот, их длительность и т.д.

DRO2MIDI позволяет переводить данные в MIDI и экспортировать настройки SBI инструментов. Пруф.

К слову, настоятельно рекомендуется использовать DosBox 0.72, с последними версиями, говорят, DRO2MIDI работает плохо.

Nota Bene совсем для гиков

Если просмотреть содержимое архивного файла sound.pak в папке с игрой Dune II, то окажется, что внутри располагается множество файлов с названиями типа dune0 и расширениями .adl, .c55, .pcs, .tan и .xmi.



Как, в общем, не трудно догадаться, эти расширения обозначают определённые звуковые устройства: соответственно, AdLib и, предположительно, SoundBlaster, Roland SC-55, PC Speaker, Tandy1000 и MIDI (в случае с Dune II, это, очевидно, MT-32/LAPC-1).



То есть, разработчикам игр приходилось создавать отдельные "музыкальные" файлы для каждого устройства, поскольку каждое из них нуждалось в "своём" потоке данных.

Геморрою-то...

Ну, а дальше всё просто... на словах

Собственно, если у нас есть инструменты и возможность прослушать их звучание отдельно от всех остальных, нам остаются совсем пустяки: взять секвенсор, загрузить в него MIDI-файл, а затем на каждую дорожку назначить свой инструмент, при условии, что вам удалось получить информацию о том, на какой дорожке какой инструмент должен находиться. Потому что в MIDI-файлах, скачанных отсюда, дорожки обозначены только номерами каналов, а информация об инструментах вбита в виде MIDI-Events, с названиями из стандартного набора General MIDI:



Предположительно (сам ещё не пробовал) придётся просто перебирать по отдельности каждую дорожку и прилаживать наиболее подходящий тембр из JuceOPLVSTi.

И когда уже ясно, что где, остаётся самое простое: подобрать - или настроить самостоятельно - похожие по звуку тембры в Dexed или любом другом "серьёзном" FM-синтезаторе.

Задачка, скорее всего, не на один час.

Когда/если будет время на эксперименты, о результатах доложу отдельно.

1 комментарий: