Как работал звук в 1990-м: разбор синтезатора OPL2 и виртуальной машины музыки

Звук в компьютерных играх 1990 года создавался не сэмплами, а с помощью частотной модуляции — чип OPL2 (YM3812) от Yamaha генерировал тембры, модулируя синусоиды. В игре Fire & Forget II звуковой драйвер содержал не просто данные, а целую виртуальную машину с байткодом, которая управляла регистрами

Как работал звук в 1990-м: разбор синтезатора OPL2 и виртуальной машины музыки

Звук в компьютерных играх 1990 года создавался не сэмплами, а с помощью частотной модуляции — чип OPL2 (YM3812) от Yamaha генерировал тембры, модулируя синусоиды. В игре Fire & Forget II звуковой драйвер содержал не просто данные, а целую виртуальную машину с байткодом, которая управляла регистрами синтезатора. Под катом — 28 минут саундтрека в Winamp с окном живых регистров, разбор на пяти видео от ноты до взрывов, и найденная вырезанная пьеса композитора.

Как устроен синтезатор OPL2 и почему он звучал как в 1990-м

Синтезатор OPL2 (YM3812) — это FM-синтезатор, разработанный Yamaha и использовавшийся в звуковых картах AdLib и ранних Sound Blaster. В отличие от современных сэмплерных синтезаторов, OPL2 генерирует звук с помощью частотной модуляции: несколько синусоидальных генераторов (операторов) модулируют друг друга, создавая сложные тембры. Чип имеет 9 каналов, каждый из которых может использовать до 2 операторов. Управление происходит через регистры, которые задают частоту, амплитуду, огибающую и алгоритм модуляции.

В Fire & Forget II звуковой драйвер напрямую записывает значения в эти регистры, формируя звуки выстрелов, взрывов, двигателей и музыку. Автор статьи записал 28-минутный саундтрек игры через Winamp с плагином, показывающим состояние регистров в реальном времени. Это позволило увидеть, как меняются параметры операторов в зависимости от игровых событий.

Предыстория и контекст: почему AdLib стал стандартом

В конце 1980-х звук на PC был примитивным: встроенный динамик мог издавать только прямоугольные волны. AdLib в 1987 году представила карту на основе OPL2, которая позволяла создавать музыку в стиле игровых автоматов. Несмотря на высокую цену (около 200 долларов), она стала де-факто стандартом для игр до появления Sound Blaster. Разработчики писали драйверы, которые напрямую управляли регистрами чипа, экономя ресурсы CPU.

Fire & Forget II (1990) — типичный представитель эпохи: музыка и звуки генерировались одним и тем же движком. Автор статьи обнаружил, что звуковой драйвер игры содержит не просто данные, а целую виртуальную машину с байткодом. Это объясняет, почему композиторы могли создавать сложные партитуры, не перегружая процессор.

Как работает виртуальная машина музыки?

Виртуальная машина (VM) в драйвере Fire & Forget II — это интерпретатор байткода, который управляет регистрами OPL2. Байткод содержит команды для установки частоты, громкости, включения/выключения нот и выбора инструментов. Интерпретатор читает последовательность байтов из памяти и выполняет их, создавая музыку. Такой подход позволял композиторам писать музыку в текстовом виде, а затем компилировать её в байткод.

Автор восстановил формат байткода по дампу драйвера и нашёл пьесу, которая была вырезана из финальной версии игры. Это редкое свидетельство творческого процесса: композитор, вероятно, решил, что трек не подходит по настроению, но код остался в драйвере.

Технические подробности: от одной ноты до взрывов

Автор записал пять коротких видео, демонстрирующих, как меняются регистры OPL2 в реальном времени. Одиночная нота показывает, как устанавливаются частота оператора и огибающая. Аккорд активирует несколько каналов одновременно. Взрыв создаётся резким изменением частоты и амплитуды с шумоподобным эффектом. Вертолёт имитируется циклическим изменением частоты для вращения лопастей. Музыкальная тема демонстрирует последовательность нот с разными инструментами. Каждое видео сопровождается окном регистров, где подсвечиваются изменяемые значения.

Кого затронет и как: разработчики, ретро-энтузиасты, музыканты

Статья будет полезна разработчикам, которые хотят понять, как работали звуковые движки до эпохи сэмплов. Ретро-энтузиасты смогут глубже оценить технические решения 1990-х. Музыканты, интересующиеся FM-синтезом, увидят практический пример управления OPL2. В России и СНГ тема особенно актуальна: многие выросли на играх с AdLib-звуком, и технический разбор вызывает ностальгию. Для современных проектов знание OPL2 может пригодиться при написании эмуляторов или создании чиптюн-музыки.

Что будет дальше: эмуляция и сохранение наследия

Автор планирует выложить порт Fire & Forget II с полным звуковым движком в открытый доступ. Это позволит другим разработчикам изучать и модифицировать код. Также возможно появление эмуляторов виртуальной машины, которые смогут воспроизводить музыку из других игр того же драйвера. В более широком смысле работа автора — часть движения по сохранению цифрового наследия. Многие игры 1980-90-х используют проприетарные звуковые движки, которые могут быть потеряны. Открытие формата байткода и интерпретатора — шаг к тому, чтобы эта музыка звучала и через 30 лет.

Итог

Разбор звукового движка Fire & Forget II показывает, насколько продуманными были технологии 1990 года. Виртуальная машина музыки на OPL2 — элегантное решение для своего времени, сочетающее гибкость и производительность. Для всех, кто интересуется ретро-технологиями, FM-синтезом или историей игр, эта статья — ценный источник знаний.