Как работает звуковое ПО

История

Далеко не каждый специалист в области звука является программистом, знающим, как, что и почему так работает. Под термином "программирование" в звуке часто подразумевают работу с уже готовым ПО. То есть, всё, что находится внутри, очень часто воспринимается как "магия". Это существенный пробел. Ведь, например, архитектор многое знает о материалах, из которых он планирует создать дом, конструктор представляет, из чего и как он собирается делать механизм, причем подетально. Поэтому без комплексных современных знаний не обойтись и в звуке.

Если вспомнить конец 90-х, то тогда для русскоязычного сообщества новые технологии в звуке больше напоминали филькину грамоту - русскоязычных документаций нет, ПО мало, огромное противостояние приверженцев старых технологий и методов, а вся новая информация собиралась буквально по крупицам.

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

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

 

* * *

Для начала давайте ответим: что такое драйвер? Вернее, что под драйвером подразумевали в эпоху операционной системы MS-DOS, когда Windows ещё не было. По существу, это программа, которая позволяет управлять аппаратными ресурсами некоего подключенного устройства, командовать им на понятном ему языке. Сама MS-DOS не видела таких устройств так, как это сейчас можем понимать мы, пользуясь современными технологиями. MS-DOS была предназначена для выполнения простейших операций с файлами, а всё остальное функционировало в обход этой операционной системы. Конечно, это подразумевало ряд неудобств, например, сколько тогда было стандартов для того же звука: все игры должны были обязательно поддерживать каждую звуковую карту, а если её не было в списке поддерживаемых... что ж, играйте без звука тогда. В общем, полный разброд и шатание.

Когда было решено внедрить новую операционную систему под названием Windows в её первых версиях (наиболее популярной у нас была Windows 3.1), возник вопрос: а как всё собрать в единое целое и привести к общему стандарту?

Позже компания Microsoft сделала очень интересный шаг вперёд - она создала драйверы виртуальных устройств. Виртуальное устройство, как ясно из названия, не подразумевает что-либо конкретное, например, прямое общение с аппаратным устройством и его драйвером. Это некое обобщение типа. Например, вы хотите воспроизвести Wav, но у вас имеется несколько устройств, способных это сделать, соответственно, в настройках системы вы устанавливаете то конкретное, которое будет использовано по умолчанию. Таким образом, операционная система стала выступать посредником между пользовательскими интерфейсами и прямым выходом на аппаратные ресурсы. Это облегчило задачу разработчикам ПО, тех же самых игр, в процессе создания которых всё значительно упростилось, а также производителям "железа", потому как появились некие единые стандарты.

Часто говорят, что полноценный переход компьютерного сообщества на Windows 95 состоялся благодаря играм. Вернее будет сказать, что такой удачный переход получился благодаря изобретению и внедрению технологии DirectX, которая дала практически неограниченные для того времени возможности, и офисные РС стали мультимедийными. При этом нельзя увтерждать, что Microsoft навязала технологию, DirectX создавался совместными усилиями разработчиков ПО и производителей "железа".

DirectX изначально включала следующие основные компоненты:

  • DirectDraw - прямой выход на аппаратные ресурсы графического адаптера;
  • DirectSound - по существу, это целый программно-аппаратный комплекс, который управляет воспроизведением звука плюс микшированием воспроизведения звуков с нескольких источников;
  • Direct3D - управление ресурсами при создании графических изображений и выводом трёхмерной графики;
  • DirectInput - решение вопросов взаимодействия с манипуляторами (клавиатура, джойстик, мышь);
  • DirectSetup - установка DirectX;
  • AutoPlay - в Windows 95 это было необходимо, а именно - реализация автоматического запуска инсталляции программ либо воспроизведения аудио-CD при помещении в CD-ROM.

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

Дело в том, что до появления DirectX компьютер мог воспроизводить или записывать только один стереофонический аудиофайл. Как поступать в данной ситуации? Первые программы делали предварительные расчеты, с помощью которых из множества треков формировался конечный стереофайл, который и воспроизводился (если мы говорим о воспроизведении). Это не было в режиме реального времени. После изменения какого-либо параметра трека все расчёты нужно было производить заново. Причем всё занимало много времени, поэтому в первых многодорожечных программах указывались отдельные настройки для режима прослушивания и формирования конечного микса. То есть, к примеру, при указании частоты дискретизации в 22,050 КГц на расчеты уходило 5 минут, 44,1 - 10! Несколько утрированно, но правдиво.

Поскольку аппаратные ресурсы были существенно ограничены, то даже для работы с обычным стереофайлом нужно было искать технологические компромиссы. Так, была введена буферизация ввода/вывода (в оперативную память помещались небольшие фрагменты данных, которые, соответственно, воспроизводились или записывались, то есть всё делается пофрагментно). Причём сама буферизация может происходить на двух уровнях - приложений (1), драйверов устройств (2). Таким образом, в рамках тех же программ можно предварительно не высчитывать получившийся файл целиком, а производить вычисления над каждым отдельным фрагментом поэтапно.

Сегодня, открыв ту или иную программу многодорожечной записи, в её настройках вы всегда найдёте возможность самостоятельного указания размеров буферов записи и воспроизведения. Такая технология решила множество проблем, а также сделала возможным полноценное воплощение режима реального времени. Например, когда проигрывается файл мультитрека, вы можете двигать слайдеры, крутить ручки, а сами изменения будут ощутимы сразу, хотя, как вы понимаете, все изменения вступают в силу при вычислении следующего фрагмента, но поскольку сами эти фрагменты невелики по размерам, всё происходит незаметно.

DirectSound - практически идентичное воплощение, но уже в более глобальном смысле: в рамках операционной системы, и здесь мы уже говорим об уровне драйверов. То есть, вы, как и в мультитреке, в рамках Windows можете управлять различными источниками звука, их громкостным балансом, при этом у вас может одновременно звучать множество приложений.

Ведь во времена MS-DOS и первых игр под Windows существовало явное разделение - музыкальное оформление воспроизводилось за счёт MIDI-устройства, а голоса персонажей - в рамках аудио. Добавить что-либо ещё, например, дополнительные звуки, не представлялось возможным. А тут такой прогресс! Игры действительно зазвучали.

* * *

Но зазвучали не только игры. В звуковом ПО сразу же выделилось два перспективных направления:

  • модульные студии. То есть, инструменты и т.п. стало возможным собирать из отдельных модульных блоков;
  • плагины.

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

Что такое плагин? Это программный модуль, который подключается "в разрыв" или параллельно цепи следования сигнала. Соответственно, сам сигнал обрабатывается по алгоритму, заложенному в самом плагине. Поскольку в каждом таком современном модуле есть возможность регулирования параметра MIX (взаимоотношение уровней чистого и обработанного сигналов), то практически всегда мы говорим о параллельном подключении, а соединение "в разрыв", указываемое на схематическом представлении, носит условный характер.

И все первые плагины на PC выпускались только под технологией DirectX. Нужно отметить, что пользовательское сообщество вокруг РС и его музыкальных возможностей в то время собралось очень большое. Появился явный спрос, и индустрия стала двигаться семимильными шагами. В отличие от тех же Apple Macintosh, которые считались наиболее профессиональными в звуке, гибкая платформа РС предлагала вместо дорогих аппаратных эффект-процессоров использовать программы, что гораздо удобнее. Заменить электронные схемы математическими алгоритмами - задача не из самых простых, в результате единственное, чего не хватало в то время, это качество. Но и эта задача оказалась разработчикам по плечу.

* * *

Если бы на РС такая революция не произошла, то они бы и остались серыми офисными "работниками", а Apple диктовала бы свои условия игры. Как бы это могло выглядеть сейчас? Думается, что звукопроизводство оставалось бы до сих пор очень дорогим. Ну а тут такая революция: множество независимых разработчиков, рынок полностью открыт для возможностей и спрос на технологии значительно превышает предложения.

И вот, основанная ещё в начале 80-х компания Steinberg решила придти и на рынок РС, причём не с пустыми руками, а с собственными профессиональными разработками - Cubase и WaveLab плюс двумя ключевыми технологиями - ASIO и VST.

ASIO (Audio Streaming Input/Output) - это системные драйверы наподобие DirectX, только с профессиональным уклоном в сторону звукопроизводства (напомним, что DirectX - для игр). В частности, на этом уровне была полноценно поддержана многоканальность, высокие значения характеристик разрядности и частоты дискретизации, конкретно решены вопросы синхронизации, а также управление временем задержки. По существу, всего того, что было так необходимо специалистам.

VST (Virtual Studio Technology) - технологический стандарт взаимодействия между программами либо программами и модулями.

Чтобы лучше понимать само предложение от Steinberg, нужно ввести понятие хоста (host - в пер. "хозяин", "главенствующий"). По существу, это ядро любой мультитрековой программы или MIDI-секвенсора. С аппаратными ресурсами оно связано через ASIO, а все модули, которые к этому хосту подключаются, взаимодействуют через связи, предусмотренные технологией VST.

Как видите, VST отличается от DirectX даже на уровне философии представления. Изначально данный стандарт предусматривал управление по MIDI, поддерживал многоканальность, чего у второго не наблюдалось и в помине. Но предложить - это одно, а сделать стандарт массовым - совершенно другое. Хотя, в принципе, DirectX и не собирался конкурировать с VST на профессиональном звуковом поле. Конкурировали, большей частью, разработчики софта, приверженцы того или иного направления. Но Steinberg, предложившая более качественные замены DirectX в звуке на всех уровнях применения последнего, в конце концов, оказалась в выигрыше.

(Продолжение следует)

Кристофер,
christopher@tut.by

Версия для печатиВерсия для печати

Номер: 

25 за 2008 год

Рубрика: 

Multimedia
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!