Comments 30
Скажите, а отличия от YM2612 очень большие?
Над эмулятором чипа YM2612 я сделал библиотеку MIDI-синтезатор libOPNMIDI, и как раз разного рода документации встречал и хорошо понимаю разницу между чипами. Дополню от себя:
По поводу встроенного ЦАП, чтобы выводить на него, надо иметь ИДЕАЛЬНУЮ синхронизацию, чтобы посылать сэмплы на ЦАП-канал. Если это делать процессором, звук будет плавать. На звуковых картах обычно используется буферный чип, от которого уже звук и идёт на ЦАП, а программы лишь копируют в него кусочки буфера. Тут сам ЦАП напрямую, и тут надо каждый сэмпл посылать строго вовремя, иначе, как я уже сказал, звук поплывёт.
Про регистры, у OPL и OPN сами наборы регистров разные, адреса разные, и разные возможности, но они в общем похожи:
Имеется характеристики нарастание, затухание, стабиль и отпуск.
У OPN имеется два затухания: первое затухание такое же как и у OPL, а второе затухание идёт во время стабильной фазы.
На OPL указанные характеристики имеют диапазон от 0 до 15, а на OPN, нарастание, затухание-1 и затухание-2 имеют диапазон от 0 до 31.
На OPL имеется два НЧГ с постоянной частотой: самый быстрый выполняет вибрато частотой, и самый медленный выполняет вибрато громкостью. На каждом операторе имеется два флага, каждый из которых можно включить частотное (вибрато) и/или амплитудное (тремоло) вибрато.
На OPN имеется один НЧГ, но с возможностью регулировать частоту, выбирая один из 8 вариантов (от 3,98 до 72 герц). Амплитудное или частотное вибрато настраивается отдельно для всего канала уровнем чувствительности, и для каждого оператора можно установить один флажок, чтобы применять к нему модуляцию.
На OPN имеется ПУЗГ-ГО (SSG-EG), функция, которая позволяет серьёзно изменить поведение генератора огибающей, устанавливая четыре флажка в разные состояния. В документации к Sega Megadrive эта фукнция обозначена как "проприетарная". Такая возможность используется в музыке к игре Asterix & Obelix the Great Rescue. На кривых эмуляторах чипа, по типу старого GENS, музыка будет играть очень криво и глючно.
OPL2-OPL3 чипы поддерживают разные формы волн на каждом оператре. На чипах семейства OPN поддерживается только синусная волна. Также на чипе OPL1.
Чип OPL3 поддерживает 18 каналов двух-операторного синтеза, а также поддерживает возможность включить 4-х операторный сиинтез с 6-ю каналами. Также поддерживается режим ударных (который был ещё на OPL2-чипе), то есть, занимаются два канала под пять ударных инструментов - бочка, рабочий барабан, тарелка, шляпа, и том.
Чипы семейства OPN чисто 4-х операторные. Чип OPNA - это более прокаченная версия OPN2, у него есть встроенный простой звукогенератор на 4 канала (прямоугольник или шум), а также 6 ударных инструментов на основе встроенных предзаписанных в ПЗУ чипа ADPCM-кусочков.
Чипы OPN-семейства поддерживают незначительное тоновое смещение на каждом операторе, чтобы звук не был монотонным и плавно переливался во время удержания длинных нот.
На чипе OPN-семейства поддерживается 8 разных алгоритмов 4-х операторного синтеза. На OPL3-чипе поддерживается только 4 при нормальном 4-х операторном синтезе, а для поддержки остальных 4-х вариантов нужно костныльно использовать двухоператорный синтез, занимая два канала. Однако, некоторые виды алгоритмов, возможные на OPN-чипе, вовсе недостижимы на OPL3-чипе.
На OPL-чипе уровень громкости каждого оператора в логарифмическом диапазоне между 0 и 63. На OPN-чипах шире диапазон (от 0 до 127), но логарифмическая огибающая более глубокая, поэтому звук заглохнет ближе к среднему значению.
На OPL-чипе имеется масштабирование огибающей (короче на высоких нотах, длиннее на низких), которое может влиять не только на масштаб ошибающей, но и на уровень громкости (чем выше тон, тем тише звук). На OPN-чипах масштабирование работает только по длине огибающей.
Формула рссчёта частоты отличается одним коэффициентом (зависимый от частоты работы выбранного чипа) и шириной значений октавы и герцовой частоты.
когда хотел сделать USB->ISA переходник,
Интересный проект. А как вы планировании сделать контроллер ISA?
Чтобы драйвер заработал, надо чтобы его кто-нибудь использовал, а игрухи тупо пишут в порты, увы.
А вот из эмулятора, пожалуйста...
"Чтобы не заморачиваться с написанием драйверов и их установкой, можно сделать микроконтроллер кастомным HID-устройством"
В корне неверный подход. USB Audio class включает в себя как подкласс USB MIDI, конечные точки там типа bulk (пакеты по 64 байта в кадре — сколько влезет, скорость передачи определяется быстротой выставления ACK устройством). Так оно будет играть из коробки в винде и линуксе.
Нет, тут именно драйвер который играет GM через OPLы. OPL не понимает миди от слова совсем, это хардварные синтаки, органы управления которых управляются регистрами, которые встроенные в винду дровишки даже трогать не позволяют.
Что мотивировало многих людей и меня в том числе писать свои, которые нихрена не знали про инструменты GM зато пересылали в регистры значения из событий контролов миди и отыгрывали события нот…
… ну, это я типо на пальцах пытаюсь изложить, реальность несколько сложней
А тут вы что будете делать? SoundFont'ы не подходят, поскольку метод синтеза другой.
Софтовая реализация V-USB — это не 12, это 1,5 мегабита. И набор классов там минимальный доступен (как раз только HID, audio device class — начиная с full-speed)
github.com/jpcima/ADLplug
github.com/Wohlstand/OPL3BankEditor
USB-звуковая карта на YM3812