О звуке

Самый примитивный компьютерный звук извлекался из однобитового «спикера». Компьютер через порт ввода вывода или подавал или снимал постоянное напряжение на динамик. Звук таким образом в основе своей представлял серию щелчков. Программирование звуковых эффектов таким образом сводилось к периодической записи в порт спикера битов 0 или 1. Однако подавая эти биты с нужной частотой и в правильной последовательности можно было воспроизводить как монотонную ноту, так и довольно сложные комбинации.

Например если выводить быстро подряд поочередно с небольшим интервалом две разные ноты, то они для слуха специфично сливались в некое подобие двухголосой полифонии, хотя никогда и не звучали одновременно. Плюс свою лепту могла внести физическая инерция динамика — если менять напряжение на нём достаточно часто, то он не будет успевать доходить до крайних положений, что может смягчить и обогатить звук.
«Однобитовую» музыку подобного плана можно послушать на примере музыкального редактора Wham! для 8–битного компьютера ZX Spectrum 48:



Причём Wham! позволял выгрузить музыку с воспроизводящим её кодом для использования в других программах — чем некоторые игры пользовались.
Но некоторые шли дальше и создавали на однобитовом звуке на этом же ZX Spectrum 48 почти невозможное звучание:



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

Чтобы разгрузить центральный процессор можно было применить отдельный чип. Например инженеры IBM в IBM PC (не первый конечно, но широко распространившийся пример) сделали так: в этих (изначально) 16–битных ПК имелась микросхема Intel 8253 содержащая три независимых программируемых счётчика/таймера, третий из которых отсчитывая заданные интервалы автоматически «дёргал» спикер. Таким образом ЦП мог начать воспроизведение монотонного однобитового звука заданной частоты, а само воспроизведение в дальнейшем не требовало его участия (хотя надо было вмешаться позднее, чтобы звук остановить или изменить его тональность). Однако монофонический монотонный однобитовый звук впечатлить своими музыкальными возможностями никого не мог — требовалось что–то поинтереснее.

Решение напрашивалось само — сделать микросхему с несколькими «голосами» и не однобитовыми, а с настраиваемой громкостью и даже формой выходного сигнала. Кроме того заложить какие–либо эффекты для усиления богатства и разнообразия издаваемых звуков. Такие чипы часто называются Programmable Sound Generators (PSG) — программируемые генераторы звука.

Например в ZX Spectrum 128 стоял чип AY–3–8910 от General Instrument в котором было три независимых генератора прямоугольного сигнала (A,B и C) у каждого можно было задать отдельно громкость и частоту.
Прямоугольный сигнал на графике выглядит так:



что по сути сильно напоминает вышеописанный однобитовый «вкл/выкл» по таймеру звука спикера у IBM PC и это неслучайно — частота сигналов так же задаётся как верхнее значение для таймера, отсчитывающего время до переключения сигнала.
Кроме того был один генератор белого шума, который мог быть подмешан в любой из каналов A,B и/или C и мог немного менять своё звучание.
А в качестве «обогатителя» звука в чипе присутствовал генератор так называемой «огибающей». «Огибающая» могла быть сигналом с одной из следующих форм с контролируемой частотой:



Огибающая могла быть применена к любому из каналов (в т.ч. к нескольким сразу) и в этом случае громкость сигнала в нём контролировалась напрямую величиной значения огибающей в данный момент времени — громкость звука могла «плавать» во времени, обогащая его звучание.
Вот видео с множеством мелодий на чипе AY–3–8910:



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

На Famicom/NES/Денди был кастомный чип с двумя генераторами прямоугольного, одним треугольного, одним шумовым и одним однобитовым DPCM-каналом. Кроме того звук каналов можно было обогащать приёмом отдалённо похожим на «огибающую» — через периоды «повтора–затухания», я тут подробно описывать не буду. Многие игроки в эту консоль сталкивались с таким явлением, что если вытащить картридж во время игры, то мелодия часто «застывала» навечно звучащей на паре чистых нот — это как раз следствие того, что генератор звука не получая обновлений от ЦП по VBlank продолжал генерировать ноты заданные последней установкой параметров.

На Commodore 64 стоял чип от MOS Technology — SID 6581. У него было три генератора сигнала в каждом из которых можно было независимо выбрать форму сигнала — пилообразную, треугольную, прямоугольную или белый шум, многорежимный фильтр и независимый контроль ADSR–огибающих для каждого канала. Про «ADSR» я расскажу чуть ниже.

Все подобные микросхемы были устроены сравнительно несложно и генерировали довольно примитивный, «искусственно звучащий» звук. Сейчас такое звучание и сами такие мелодии называют chiptune и люди увлекающиеся до сих пор создают для них мелодии.

Однако не только производители компьютерной техники бились за звук. На электронную музыку в том числе цифровую обратили внимание так же профессиональные музыканты и производители музыкальных инструментов.

«В 1887 году к Торакусу Ямахе, занимавшемуся тогда ремонтом медицинских инструментов в японском городе Хамамацу, обратилась местная школа с просьбой починить язычковый орган (фисгармонию) американского производства. После завершения ремонта, Ямаха увлёкся конструированием музыкальных инструментов и в 1889 году основал Yamaha Organ Manufacturing Company, а чуть позже — Nippon Gakki. Сегодня эта компания известна как Yamaha Corporation и уже долгие годы является крупнейшим производителем музыкальных инструментов.»

Музыканты, в отличие от компьютерщиков, хотели большего, чем «пищалки» и «шкворчалки» чиптюна. Одна из задач была: добиться от электроники звучания максимально похожего на настоящие традиционные музыкальные инструменты.
И главной «рабочей лошадкой» тут стал синусоидальный сигнал:



Синусоидальные или «гармонические» колебания — частый гость в физических процессах. Так, колебание струны математически описывается наложением синусоид. Чистая синусоида звучит при этом «слишком чисто». В общем музыканты накинулись на задачу и тоже начали изобретать как бы подешевле, но наиболее широко охватить целые классы звучаний и параметризовать их.
На некотором этапе мейнстримом в этом деле стал так называемый FM–синтез. Аббревиатура «FM» как и в радио происходит от словосочетания «Frequency Modulation (Частотная Модуляция)». Идея заключается в том, что мы сперва берем настраиваемые генераторы синусоид, называем их «операторами», а потом даём возможность задавать текущую частоту одного оператора значением текущей амплитуды (величины) другого оператора — это и называется «использовать FM–модуляцию». И вот что получалось — синусоида могла плавно менять свою частоту со временем:



Правда на практике вместо честной FM-модуляции применяли т.н. фазовую модуляцию которая проще реализуется, но всё равно в результате мы могли запрограммировать, чтобы нота, например, из высокой плавно становилась низкой или сильно обогащала свои тембры, а не звучала чисто. Дальше — больше, амплитуду модулированного оператора можно было вновь использовать как модулятор для другого! Варианты звучания резко множились, так что сидеть и перебирать их можно было днями напролёт.

Кроме модуляции сигнала музыканты так же широко использовали динамическую регулировку громкости инструмента — ту самую «огибающую». Популярность получил вариант «ADSR–огибающей», когда громкость сигнала регулировалась в рамках четырёх настраиваемых периодов: Attack — нарастание громкости, Decay — спад громкости, Sustain — задержка громкости на постоянном уровне и, наконец, Release — окончательное затухание сигнала.
График такой огибающей выглядит примерно так:



Такая огибающая позволяет неплохо имитировать то как затухает звук от настоящих музыкальных инструментов — фортепьяно, гитары и т.д. Кроме всего вышеописанного на звук в музыкальных синтезаторах накладывались и разные прочие эффекты — эхо и т.п.

В 1987 году канадская фирма Adlib взяла у производителя музыкальных синтезаторов Yamaha чип FM–синтеза YM3812 и интегрировала его в IBM PC воткнув в ISA–слот в виде музыкальной карты.
Программно чип управлялся через порт ввода–вывода $388, он для компьютера выглядел как массив из 244 регистров, которые описывают параметры 9 независимых каналов, каждый из которых состоит из двух осцилляторов которые можно комбинировать в FM–синтез.
Немного позже, после того как звуковая карта от Adlib получила популярность, сингапурская фирма Creative Technology взяла тот же самый музыкальный FM–чип от Yamaha, добавила к нему чип для воспроизведения цифрового PCM–звука и выпустила в виде звуковой карты под брендом Sound Blaster. В Sound Blaster музыкальный чип был так же замаплен на порт ввод–вывода $388, что делало его полностью совместимым со звуковой картой Adlib. Кроме того порты управления PCM–чипом и зеркало портов для управления FM–чипом были вынесены по умолчанию в группу портов начинающихся с $220, что наверняка помнят все из тех здесь кто запускал в DOS setup.exe в самых разных играх.

Я лично ранее думал, что все эти звуковые карты сразу «дружили» общим форматом музыкальных файлов и протоколом управления синтезаторами — «MIDI», но в реальности создателям игр под DOS приходилось создавать свои форматы файлов и звуковые драйвера, которые так же как и в консолях и 8–битных компьютерах периодически меняли параметры инструментов подобранных музыкантами вручную.
Но правда тут музыкантам могло помочь то, что существовало большое количество настоящих музыкальных синтезаторов от Yamaha Corporation с тем же самым чипом.
На следующем видео 8bit–guy использует этот факт для извлечения точно такого же звука, как в компьютерной игре, из синтезатора Yamaha PSS–470, а сразу после этого демонстрирует, что если пытаться на синтезаторе нажать более 9 клавиш одновременно — последующие не звучат (перемотать на 2:35):



А вот такая консоль как Sega Mega Drive имеет сразу два чипа из вышеописанных классов:
— SSG–чип Texas Instruments SN76489 (для совместимости с 8–битной Sega Master System)
— FM–чип Yamaha YM2612 (шестиканальный FM–синтез с четырьмя операторами на канал)

Со временем синтез музыки специализированными чипами уступил место программной генерацией звука самим центральным процессором (куда так же можно отнести и распаковку звука из MP3 или OGG, ведь происходит это при непосредственном участии ЦП). Ведь уже в 1998 году в игре Unreal 1 музыка генерировалась процессором из самплов комбинируемых программным синтезатором — так называемая «трекерная музыка», а еще через пару лет запущенный WinAMP не влиял на работоспособность MS Word. И современные синтезаторы уже тоже внутри содержат цифровой банк оцифрованных звуков настоящих инструментов, комбинируемых программно встроенным процессором.
Эпоха специализированных чипов синтеза, пожалуй, давно уже канула в лету.

4 комментария

avatar
Поправки:

Звуковые чипы SN76489, TIA, AY-3-8910, POKEY появились довольно-таки задолго до IBM PC, в 1977-79 годах. Потому что игровым системам определённо был нужен звук, а PC в качестве игровой системы долго не рассматривался. Спикер PC предназначался для системных целей, и вероятно был сделан на канале таймера не из необходимости разгрузки процессора, а просто потому что таймер уже был и оставался лишний канал (другие каналы используются для действительно важных вещей — прерываний по таймеру и регенерации ОЗУ).

Огибающая в AY не для обогащения тембров. Она именно огибащая, как и ADSR — для задания изменения громкости во времени. Но в этих целях она оказалась слишком примитивной (в 1978 не особо понимали, что именно нужно). А богатые тембры из неё начали получать уже гораздо позже, лет через 12 после появления чипа — оказалось возможным запускать её на очень высокой частоте, таким образом, что периоды повторения сливались в тон (пилу или треугольник), а также смешивать с обычным каналом тона, что даёт вырожденный случай амплитудной модуляции (тон огибающей маскируется прямоугольным каналом).

В SID главная фишка — аналоговый фильтр, очень сильно окрашивающий звук. По сути приближение к архитектуре классических аналоговых синтезаторов. Аналогичную архитектуру, DCO и общий для всех каналов фильтр, имел, например, синтезатор Korg Poly 800 (1983).

В NES нет короткого буфера PCM. Там есть DPCM — однобитное кодирование 7-битного звука, в целях сжатия ценой сильных искажений, с аппаратным проигрывателем (читает память, декодирует, выводит в ЦАП, всем этим немного затормаживает процессор). Напрямую DPCM доступно 16 КБ адресного пространства ПЗУ, в которое можно включать банки посредством маппера (если есть). Зацикливать DPCM формально можно, но по самой природе кодирования нормального чистого цикла в сложных сэмплах не получится (будет сильно щёлкать переход), только если не специально сконструировать сэмпл буквально побитно (тогда можно вымучить, например, чистую пилу).

FM-синтез в чипах на самом деле PM, фазовая модуляция, близкая по сути вещь, но гораздо проще реализуемая. Т.к. это PM, именно вибрато, возможное в FM, толком не получить. Смысл этих видов синтеза в получении гармоник. Гармонический состав сигнала определяет его тембр, чем больше гармоник, тем сложнее и интереснее (реалистичнее в том числе) тембр. Две синусоиды при аддитивном синтезе были бы всего двумя гармониками, а при модуляции их получается намного больше.
  • Shiru
  • +7
avatar
Почти сломал голову пытаясь понять почему фазовая модуляция в каких то случаях эквивалентна частотной, как говорит википедия. Но кажется наглядно понял — пока нарастает вычитание фазы это действительно как бы уменьшает частоту и наоборот когда слагаемое к фазе начинает нарастать.
avatar
Довольно непоследовательно сказано о трекерной музыке, без упоминания Amiga и Paula. А до Sound Blaster был ведь еще популярный модуль Roland MT-32 с LA-синтезом.

«Эпоха специализированных чипов синтеза, пожалуй, давно уже канула в лету». Так вышло, думаю, потому, что современные музыканты не ставят перед собой амбициозных задач из области звукового дизайна. Но у некоторых специалистов аппаратные решения все еще пользуются спросом. Например: kyma.symbolicsound.com/kyma-sound-design-environment/
avatar
Про Gravis Ultrasound, мне кажется, стоило упомянуть. Хотя это тоже цифра как и SB, но всё же отличия были существенны и тогда это воспринималось как большой шаг вперёд, как я помню.
  • frog
  • 0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.