http://www.sslproject.ru автор Zipp .: Дата публикации 20-Фев-2006 ::



Введение в ASIO

Начиная писать эту статью, я подумал, что обойдусь одной – двумя страничками и за вечер изложу все свои мысли. Однако уже в процессе работы я понял, как сильно ошибался. Все время я что-то добавлял, что-то удалял, чтобы как можно понятнее (с моей точки зрения) высказать то, что знаю и думаю. Заранее приношу свои извинения за возможный технократизм – очень сложно выражаться не техническим языком. Комментарии и предложения приветствуются. Огромное спасибо Robot Hard'у и Rabar'у за то, что заставили взяться за перо.

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

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

Давайте для начала обратимся к истории и проследим развитие звука на ПК.

Эволюция звуковых карт

Первым в истории ПК (здесь и далее подразумевается спецификация IBM PC -совместимый компьютер ) устройством воспроизведения звука являлся небезызвестный PC Speaker. За неимением лучшего программисты того времени ухитрились выжать из него максимум возможностей. Услышанные мною в начале 90х на этом самом спикере первые трекерные модули буквально поражали воображение. Это просто разительно отличалось от примитивного попискивания. Однако само звучание, кончено же, оставляло желать лучшего.

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

Первой же в истории ПК полноценной звуковой картой принято считать Creative Music System ( C / MS ), выпущенной в 1987 году. Это была плата для разъема ISA . На борту были ЦАП/АЦП и один из первых FM -синтезаторов с 12-голосной полифонией. К сожалению, высокая цена не позволила этому устройству стать популярным – для своего времени оно было слишком инновационным.

В то же самое время фирма Adlib выпускает одноименную, простую и доступную карту, построенную на чипе OPL 2 ( YM 3812) от Yamaha. Эта карта не имела ЦАП/АЦП и являлось исключительно FM-синтезатором. Однако ее невысокая цена сделала ее весьма распространенной среди любителей игр.

Сориентировавшись, фирма Creative отказывается от поддержки C / MS и выпускает на том же самом OPL 2 звуковую карту, которую называет SoundBlaster. Однако, в отличие от Adlib , SoundBlaster уже содержит одноканальные 8 битовые ЦАП и АЦП. Чуть позже выходит слегка модифицированная версия SoundBlaster – SoundBlaster Pro, все еще 8 битовая, но уже поддерживающая режим стерео и частоту дискретизации 22050 Гц, которую в дальнейшем в продукте SoundBlaster 16, Creative повышает до 44100. Именная такая комплектность и функциональность звуковых карт находит широкое распространение на довольно продолжительный срок.

Стандартом звуковых карт становится устройство, оснащенное ЦАП/АЦП (1 линейный вход, 1 микрофонный вход, 1 линейный выход, 1 выход на наушники), MIDI -синтезатор (MIDI/Game port ) и встроенный аналоговый микшер.

Позже, в конце 90х звуковые карты начали оснащаться процессором эффектов. Этот процессор мог реализовать такие эффекты, как: студийные (chorus, delay, reverb и т.д.) и игровые (имитация пространства, имитация объемного звучания) [подробнее об этих и других эффектах в продолжении серии статей].

Современное поколение звуковых карт настолько пёстро и разнообразно, что даже диву даешься. Если раньше звуковую карту всегда приходилось брать отдельно, то сейчас вы можете получить ее "бесплатно" в наборе, т.н. интегрированное аудио. Конечно, качество преобразователей в таких устройствах далеко от совершенства, хотя сам цифровой тракт может быть на весьма высоком уровне, но это вызвано требованием удешевить стоимость такого решения. Интерфейсы USB и FireWire подарили нам такое понятие, как внешнее аудиоустройство. Сфера применения звуковых карт существенно расширилась: для простого озвучивания ПК, для игр, для звукозаписи и т.д. Диапазон цен также значительно расширился от 1-2$ до нескольких тысяч. Соответственно изменился и способ работы с ними. И мы плавно подходим к следующему разделу:

Эволюция аудиоинтерфейсов

Итак, снова коснемся истории. Одной из первых широко распространенных операционных систем для ПК была знаменита я ОС MS - DOS (здесь и далее мы будем рассматривать только ОС Microsoft, как наиболее распространенные на ПК). В ней не было совершенно никаких средств для работы с аудио. Программисты могли полагаться только на себя самих. К тому же наличие большого количества несовместимых между собою звуковых карт еще больше усложняло их работу. Доходило до того, что некоторые программы работали только со строго определенной картой.

Ситуация значительно улучшилась с появлением Windows , драйверов устройств и первого аудиоинтерфейса для ПК – Microsoft Multimedia Extention (MME). Драйверы устройств позволили программистам абстрагироваться от оборудования и сконцентрироваться на алгоритмах, а MM М предоставил удобные функции для управления аудиоустройствами. Производительность ПК того времени не позволяла надеяться ни на серьезную работу со звуком ни на серьезные игровые приложения. Эти факторы и сказались на функциональности интерфейса, первоочередная задача которого свелась только к воспроизведению и записи одного источника звука. Т.е. изначально не была заложена многоканальность, микширование и многие другие, столь необходимые сегодня функции.

С появлением Windows 95 свет увидел знаменитый DirectX , в состав которого вошел интерфейс DirectSound. По сравнению с Microsoft Multimedia Extention – это была революция. Функциональность была значительно расширена такими вещами как: разрядность аудиопотока до 24 бит, частоты дискретизации до 192 Кгц, микширование нескольких аудиопотоков, управление высотой и громкостью отдельных аудио каналов, появилась поддержка объемного звучания, значительно снижена задержка при воспроизведении. И самое главное – появилась возможность аппаратно выполнять некоторые функции обработки (в частности – микширование аудиопотоков). Мало того, если какая то из функций не поддерживается аппаратно, DirectSound берет на себя ее выполнение, при этом, правда, задействуется уже центральный процессор. Однако "игровая" направленность этого интерфейса тоже дает о себе знать. За 10 лет было выпущено 9 версий DirectSound , каждый раз он дополнялся новыми функциями, но все они больше применимы к игровым приложениям.

Небольшое лирическое отступление:

Почему именно к игровым? Давайте разбираться. Возьмем, к примеру, такую функцию как микширование аудиопотоков (эта функция, согласно спецификации DirectSound , должна выполнятся аппаратно). Прикиньте, сколько у вас потоков при работе в FruityLoops Studio? Прикинули? Не знаю, сколько у Вас получилось, но правильный ответ: 1 стереопоток. Ведь на звуковую карту у Вас попадает уже смикшированные и сэмплы и синтезированный звук. Почему так? Да потому, что перед окончательным сведением все генерируемые звуки проходят еще через микшер, в котором дополнительно обрабатываются назначенными эффектами. Хорошо, но ведь можно же аппаратно смикшировать уже обработанные каналы? Опять нет, - хост использует для этих целей еще и алгоритмы интерполяции и дизиринга для улучшения финального результата. И алгоритмы эти довольно сложные, а часто еще и патентованные! Разве можно такую функцию доверять звуковой карте?

Зачем же тогда нужно аппаратное микширование? Ответ прост – для игр. Ведь в играх у нас одновременно звучит множество источников: диалоги героев, выстрелы, взрывы и т.д. Зачем нагружать процессор, когда эту функцию можно доверить звуковой карте. Да и кто будет вникать в нюансы звучания выстрелов базуки в том же Doom 3?

Так, а что же собой представляет аппаратное микширование? В двух словах, и без технических подробностей, выглядит это следующим образом: программа загружает в память несколько звуковых файлов, затем в нужный момент подается команда на воспроизведение, драйвер передает команду звуковой карте и та, без участия процессора, подмешивает требуемый звук к общему потоку (естественно, используя собственные алгоритмы). В технических характеристиках карты часто говорится о 32 и 64 аппаратно ускоряемых потоках. Эта цифра означает, сколько же звуков может смешать карта одновременно. Аналог полифонии в MIDI.

И тут на арене появляется ASIO ( Audio Streaming Input / Output – Потоковый Ввод/Вывод Аудио), ради которого и затевалась эта статья. Справедливости ради стоит сказать, что появился он достаточно давно, но отсутствие поддержки разработчиками звуковых карт для ПК долго продержало его в тени. Что же в нем такого, что заставляет некоторых "посвященных" с благоговением вздыхать, произнося его название?

Начнем с того, что разрабатывался он специально для профессиональной работы с аудио. Т.е. его основные потребители – музыканты, звукоинженеры и т.д. Давайте посмотрим, что же говорит о своем детище сам разработчик – фирма Steinberg:

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

Разработкой интерфейса ASIO фирма Steinberg желает помочь производителям аппаратного и программного обеспечения создавать оборудование и драйверы, которые расширят аудио возможности персональных компьютеров и оправдают ожидания пользователей (музыкантов и звукоинженеров).

ASIO обеспечивает такие аспекты эффективной аудио обработки как: высокая пропускная способность, синхронизация, малая задержка (latency), и аппаратная расширяемость. Интерфейс не ограничен фиксированным количеством входных и выходных каналов (хотя конечно это количество ограниченно производительностью самого ПК). Нет ограничения также: на частоту дискретизации (32 Кгц – 96 Кгц или даже больше), на формат выборки (sample format) (16, 24, 32 бита или 32/64 битные форматы с плавающей точкой).

Аудио подсистема (звуковое оборудование) управляется программным модулем, называемым "аудио драйвер". ASIO требует, чтобы производитель оборудования предоставлял такой драйвер, который бы абстрагировал ПО от железа, и которым ASIO смог бы управлять.

Для эффективной обработки и большой гибкости ASIO представляет каналы (и входные и выходные) как кольцевые буферы с блоками данных. Фактически используется механизм двойного буфера, который может быть легко адаптирован к большому количеству различных представлений. Один буфер всегда содержит данные только для одного канала. Такой подход позволяет программному обеспечению очень эффективно выполнять обработку (в отличие от модели обработки чередующихся буферов). Размер блока данных устанавливается драйвером для лучшей поддержки аппаратуры. Драйвер выделяет память для текущих аудио блоков. Это позволяет производителям оборудования подбирать лучший способ доступа к их решениям. Это один из ключевых моментов в достижении минимальной задержки при обработке сигнала.

Хочу прокомментировать несколько моментов из этого манускрипта. Дело в том, что ключевым подходом в ASIO является представление звука отдельными каналами. Вы спросите и что же здесь такого? И я Вам отвечу. Со времен Microsoft Multimedia , звук, моно он был или стерео, представлялся одним потоком (т.н. чередующаяся буферизация). Никто тогда особо и не представлял, что могут появиться стандарты 2.1, 5.1, 6.1, 7.1 и т.д. Почему Microsoft по ступили именно так, история умалчивает. Вообще такой подход очень характерен для ПК - еще Intel при переходе от 8 к 16 битовым процессорам применил подход чередования байтов в словах (сначала шел младший байт, потом старший – программисты должны были быть крайне внимательны, чтобы не перепутать). Это же самое чередование сохранилось и в DirectSound.

Основной минус чередующейся буферизации проявляется именно при обработке аудио. Дело в том, что для того, чтобы выполнить операции над звуком в DirectSound сначала нужно выделить из общего потока левый и правый каналы (четные и нечетные по порядку значения), затем сохранить каждый из них во временной памяти, произвести требуемые операции над каждым из них, снова "упаковать" в чередующемся формате и передать функции воспроизведения. С увеличением количества аудиоканалов увеличивается и количество "лишних" действий. Пусть размер буфера не так уж и велик, но количество операций неоправданно завышено, а ведь производительность ПК может пригодиться и для более полезной деятельности, например, для добавления в проект еще одного синтезатора! Этого-то недостатка и лишен ASIO : получили данные левого, правого канала по отдельным потокам, обработали, записали результат в те же потоки и все.

Оговорюсь, что все вышесказанное справедливо для работы VST / ASIO хостов. В играх это не столь критично.

Но для того, чтобы все работало именно так, как нам надо, необходимо оборудование, которое будет поддерживать такую схему работы и иметь рабочий ASIO -драйвер. Такие "заплатки" как ASIO4ALL, ASIO MULTIMEDIA и т.д., не помогут, т.к. они не обеспечивают аппаратную поддержку со стороны звуковой карты. Они просто добавляют в систему еще одно виртуальное аудиоустройство, имеющее ASIO -драйвер, но фактически работающее через DirectSound или MME.

Обратите внимание, что в спецификации нет ни единого слова об аппаратном ускорении каких либо функций. Малая латентность заложена в саму архитектуру ASIO.

Настройка ASIO

Как бы смешно это не звучало, но вся настройка интерфейса ASIO сводится к указанию драйверу размера аудио буфера. Эта величина указывается в миллисекундах, соответственно его фактический размер рассчитывается так: размер в миллисекундах * количество каналов (1 - моно, 2 - стерео и т.д.) * разрядность потока (8бит - 1, 16 бит - 2, 24 бита - 3 и т.д.). Рассчитывать это значение никому не нужно. Вы просто задаете тот размер, при котором латентность минимальна, а звук не "хрустит". Определяется опытным путем и зависит от производительности всей системы в целом.

Конечно, есть еще и более глубокие настройки вроде роутинга, но сейчас мы их касаться не будем. Это тема следующих статей, которые, я надеюсь, не за горами.

Выводы

Эта статься является обзорной, в ней я не даю никаких рекомендаций. Основной целью является знакомство начинающих (и не только) музыкантов с компьютерными интерфейсами для творчества. Мне не хотелось бы убеждать что какой либо интерфейс лучше другого. Я просто хочу обратить внимание, что все они предназначены для разных целей, хотя и могут использоваться в смежных областях. Microsoft Multimedia, например, морально устарел и больше не соответствует современным требованиям к функциональности. DirectSound – наиболее многофункциональный стандарт. Он подходит как для игр, так и для работы с музыкальными программами. Но, как известно, чем сложнее система, тем больше вероятность отказа. Здесь, правда, корректнее говорить не об отказе, а о применимости. ASIO же, в отличии от двух своих уже упомянутых собратьев, строго направлен на профессиональную работу с цифровым аудио. Об этом говорит его архитектура и функциональность.



Автор статьи: Zipp
zipp2000@mail.ru

Хостинг от uCoz