Как стать автором
Обновить

Комментарии 30

Скажите, а отличия от YM2612 очень большие?

Большие. YM2612 — попроще, ей не нужен внешний ЦАП (YM3014). И это удобно. А вот каналов в YM2612 меньше (6 каналов вместо 9), зато один из каналов может оцифрованный звук выводить (любой). Для трекеров — супер. С точки зрения программиста работа с микросхемами очень схожа — параллельный порт (8-бит), CLOCK, CS, WR, RD. Официальную документацию на 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 1.0 = 12 мегабит. Полезная нагрузка 33 байта. Если размер каждого пакета к примеру 33+100, то мы получим 11 тысяч запросов в секунду. Но тут еще надо учесть скорость обработки запросов операционкой. В текущей реализации все успевает отправляться на самых быстрых треках
НЛО прилетело и опубликовало эту надпись здесь
Возможно по этой причине у меня все подвисало при отправке одного регистра за раз. Сейчас по 16 и норм. Не думали о нескольких командах в одной посылке?
НЛО прилетело и опубликовало эту надпись здесь

Вот, к стати вспомнил один ньюанс, регистры которые не меняются, лучше не трогать. Я в своё время тупо апдейтил всё, и на некоторых платах звучание мягко говоря отличалось.
После того как я стал отправлять только изменившиеся значения проблема исчезла.

когда хотел сделать USB->ISA переходник,

Интересный проект. А как вы планировании сделать контроллер ISA?
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Было бы больше популяризированно, если бы можно было в обычной винде выбрать миди или любой другой стандарт «звуковой карты».
НЛО прилетело и опубликовало эту надпись здесь
Надо написать драйвер для DOS и можно грузится в саму систему как в славные добрые!

Чтобы драйвер заработал, надо чтобы его кто-нибудь использовал, а игрухи тупо пишут в порты, увы.
А вот из эмулятора, пожалуйста...

Если я чего правильно помню, то при помощи EMM386 и виртуального режима можно перехватывать обращения к портам в досе. Так работал эмулятор саунд бластера через PC Speaker и другой софт. По тому же принципу на vogons делают всякие приставки к LPT (OPL2, OPL3, Tandy) и пишут перенаправляющий софт. Олдфаги объяснят более подробно.
Не вижу проблем сделать виртуальный порт, тем более это делалось уже в старших классов карт и надо було уже прописывать драйвер.

"Чтобы не заморачиваться с написанием драйверов и их установкой, можно сделать микроконтроллер кастомным HID-устройством"
В корне неверный подход. USB Audio class включает в себя как подкласс USB MIDI, конечные точки там типа bulk (пакеты по 64 байта в кадре — сколько влезет, скорость передачи определяется быстротой выставления ACK устройством). Так оно будет играть из коробки в винде и линуксе.

Но OPL2 это не MIDI

Нет, тут именно драйвер который играет GM через OPLы. OPL не понимает миди от слова совсем, это хардварные синтаки, органы управления которых управляются регистрами, которые встроенные в винду дровишки даже трогать не позволяют.
Что мотивировало многих людей и меня в том числе писать свои, которые нихрена не знали про инструменты GM зато пересылали в регистры значения из событий контролов миди и отыгрывали события нот…
… ну, это я типо на пальцах пытаюсь изложить, реальность несколько сложней

ну это не совсем так. Те я понимаю что ты хочешь сказать, но я говорю как со стороны обывателя (и да я знаю разницу между FM и Midi)

Вполне можно сформировать Midi и именно midi формат, который будет играть яерез opl. Проигрователи есть и под linux и под dos и под win.
В DOS игрушках у каждой свой набор инструментов был. Поэтому и звучало интересно, разнообразно.
А тут вы что будете делать? SoundFont'ы не подходят, поскольку метод синтеза другой.
Специально сформированный midi для opl.
НЛО прилетело и опубликовало эту надпись здесь

Софтовая реализация V-USB — это не 12, это 1,5 мегабита. И набор классов там минимальный доступен (как раз только HID, audio device class — начиная с full-speed)

А гербера/файлы проекта печатки есть? В репозитории вроде не нашел.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории