Введение
Давайте
вспомним, что же такое звук? Те, кто еще помнят школьный курс физики,
наверняка согласятся со мной, что звук – это колебания. В нашем с вами
случае это - колебания воздуха, а точнее – колебания воздушного
давления, которое улавливается ушной раковиной и действует на молоточек
и наковальню расположенные в среднем ухе. Вспомнили? Так вот, способов
записи и воспроизведения этого самого звука человечество придумало
массу. Записывали его на воск, на проволоку, на магнитную пленку, на
виниловые диски, но все это были аналоговые методы. Появление цифровых
технологий также внесло весомый вклад в эту область.Постепенно
прогресс оснастил наши домашние компьютеры устройствами записи и
воспроизведения звука достаточно высокого уровня, настолько высокого,
что термин "домашняя студия звукозаписи" прочно вошел в нашу жизнь.
Прогресс коснулся, естественно, не только аппаратуры, но затронул и
сами принципы работы со звуком. Это хорошо видно на примере эволюции
как звукового оборудования и интерфейсов для работы с аудио, так и
самих операционных систем, на которых все это работает. Давайте для начала обратимся к истории и проследим развитие звука на ПК. Эволюция звуковых картПервым в истории ПК (здесь и далее подразумевается спецификация 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 и
т.д.). Рассчитывать это значение никому не нужно. Вы просто задаете тот
размер, при котором латентность минимальна, а звук не "хрустит".
Определяется опытным путем и зависит от производительности всей системы
в целом. Чтобы работать с ASIO4ALL,
необходимо правильно настроить программу. Параметры настройки зависят
от конкретной программы. Обычно следует войти в настройку аудио
конфигурации и выбрать ASIO - ASIO4ALL v2. Должна появиться кнопка, при помощи которой вызывается ASIO Control Panel. Внешний вид этой кнопки зависит от используемой программы. После нажатия этой кнопки откроется ASIO4ALL v2 Control Panel. Если будут возникать дополнительные вопросы, желательно обратиться к руководству по аудио приложению! Как только откроется ASIO4ALL v2 Control Panel, можно начинать настройку основной конфигурации.
Основная конфигурация 1. - Device List
Это список аудио устройств WDM, найденных в системе. Изменения настроек происходит только для выбранного утсройства. Выбраным
устройством считается то, для которого название написано жирным
шрифтом. На картинке выше это CMI8738/C3DX PCI Audio Device, остальные
устройства недоступны. Текущее состояние каждого устройства отображается маленькой иконкой и может быть одним из следующих: - Running — Устройство полностью запущено.
- Available — Устройство должно быть доступно для использования в данной сессии, но запущено не было.
- Unavailable — Устройство используется другим процессом, или не доступно для текущей сессии по другим причинам.
- Beyond
Logic — Устройство по неизвестной причине не запускается и/или выдаёт
какую-либо ошибку. Иногда закрытие и повторное открытие панели
управления может решить эту проблему, например в случае, если было
подключено устройство по USB .
2. Кнопка Action Выбирает текущее устройство для работы с ASIO. В основном режиме можно выбрать одновременно только одно устройство. 3. ASIO Buffer Size Этим
регулятором настраивается ASIO Buffer Size для текущего выбранного
устройства. Маленький размер буфера означает маленькую задержку. Если
при воспроизведении будет слышно потрескивание – рекомендуется
увеличить размер буфера. 4. Кнопка Done Закрывает панель управления. 5. Переключатель Advanced Переключает
панель управления в режим Advanced, в котором можно отрегулировать
дополнительные параметры. Переключатель Advanced открывает
дополнительную секцию в окне панели управления. 6. Load Default Settings Нажатие этой кнопки сбрасывает все пользовательские настройки на настройки по умолчанию. 7. ASIO4ALL Web Site Если компьютер подключён к Интернету, эта кнопка приведёт прямо на сайт ASIO4ALL, где можно проверить обновления и получить дополнительную информацию (пока что только на английском).
Расширенная конфигурация Как только панель управления будет переключена в режим Advanced,
внешний вид панели несколько усложнится. Пункты в списке устройств
будут "растянуты". В расширенном списке устройств можно полностью
просмотреть архитектуру WDM аудио. Список устройств состоит из: Devices, Device Interfaces и так называемые "Pins" (это жаргон Microsoft). Иллюстрация выше показывает, как взаимосвязаны вышеперечисленные элементы в иерархии WDM. Теперь кнопкой Action
можно включать/выключать каждый элемент в списке устройств. Таким
способом можно смонтировать "установку" из нескольких устройств. Но
такая "установка" требует, чтобы все устройства работали от одного и
того же источника синхронизации. Этого можно достигнуть
последовательностью соединения устройств через S/PDIF и т.д. Если устройства не синхронизированы, существует вероятность того, что их потоки через некоторое время разойдутся! Описание правой стороны панели в режиме Advanced (1..5). 1. Latency Compensation Так
как ASIO4ALL не обладает достаточной информацией об архитектуре
основного устройства/драйвера, это может вызывать некоторую задержку. Этими регуляторами можно компенсировать неизвестные задержки для ASIO4ALL. В
установке из нескольких устройств будет использоваться наибольшее
соответствующее значение. Поэтому, для некоторых устройств возможны
характерные задержки ! 2. Use Hardware Buffer Включает
аппаратный буфер для выбранного устройства. Действует только для так
называемых "WavePCI" минипортов, так как другие типы WDM драйверов
обычно не дают прямой доступ к аппаратному буферу. Наиболее
важное преимущество использования аппаратного буфера в том, что при
таком методе меньше нагрузка на центральный процессор. В дополнении,
возможно дальнейшее уменьшение времени задержки. Аппаратная буферизация на данный момент работает некорректно для "установки" из нескольких устройств. Если аппаратная буферизация не поддерживается определённым аудио устройством, при игре будет ясно слышная задержка. 3. Kernel Buffers/Buffer Offset Если
буферизация отключена, этот регулятор позволяет добавить два
дополнительных буфера, которые будут поставлены в очередь для аудио
выхода. Каждый дополнительный буфер увеличивает выходную задержку для
устройства по времени, которое берётся для одного буфера. Поэтому,
начальное значение "2" должно меняться только на маломощных машинах, на
которых маленькие размеры буфера ASIO не могут достигаться значениями
по умолчанию. Если
аппаратный буфер включен, этот регулятор определяет количество
компенсации (в мс) между тем, когда ASIO4ALL вставляет считываемые
данные из аппаратного буфера, и позицией, где ASIO4ALL "думает", что
аппаратура читает эти данные. Звучит непонятно? Вы ещё код который это
вычисляет не видели... Обычно
более высокие настройки повышают задержку и одновременно надёжность,
низкие настройки приведут к нежелательному эффекту. 4. Always Resample 44.1<->48 kHz ASIO4ALL
может пересемплировать в реальном времени 44.1 кГц из/в 48 кГц.
Пересемплирование будет автоматически происходить всякий раз, когда
ASIO4ALL открыт для 44.1 кГц, а WDM драйвер не поддерживает эту частоту
семплирования. Однако,
могут быть исключения, когда AC97 поддерживает внутреннее
пересемплирование на 44.1 кГц. Очень часто качество пересемплирования
AC97 оставляет желать лучшего и приводит к неприятным последствиям.
Чтобы избежать таких проблем, следует включить эту опцию. 5. Force WDM driver to 16 Bit Это
опция работает только тогда, когда WDM драйвер поддерживает частоту
дискретизации выше 16 бит, но ниже 24. Некоторые AC97 устройства,
например, могут работать с частотой 20 бит, но фактически не могут быть
открыты больше, чем на 16 бит. Эта опция помогает избежать таких
проблем. Проблемы Хотя ASIO4ALL
является ASIO драйвером для любого аудио оборудования, из-за различных
конфигураций могут возникать различного рода проблемы, которые не
связаны с ASIO4ALL. Наиболее вероятно, если поменять установку устройства в панели управления ASIO4ALL,
количестве доступных входных и выходных каналов, вероятно, изменится,
так же, как и названия каналов, обнаруженных приложением. Поэтому,
желательно перезапускать аудио приложение после любого изменения в
установке аудио устройств всякий раз, когда видно, что отдельное
приложение не может сделать нужные изменения на лету. Основные проблемы и возможные решения: ASIO4ALL v2 не виден в меню аудио конфигурации приложения Есть две возможные причины этого: либо приложение не поддерживает ASIO, либо ASIO4ALL v2
установлен пользователем с ограниченными правами в системе. В последнем
случае, следует зайти в систему, как администратор и повторно
установить ASIO4ALL v2. После удачной установки, ASIO4ALL v2 не будет требовать прав администратора для запуска. Аудио устройство помечено, как Unavailable или Beyond Logic даже тогда, когда не используется в другом месте Следует убедиться, что MS GS Software Wavetable Synth или любое подобное название не включено где-нибудь в установке MIDI. На сайте ASIO4ALL есть подробная информация относительно этого. Если любой такой Software Wavetable Synth (иногда представлен, как ...DLS Synth...)
может быть причиной препятствия, рекомендуется попробовать
перезапустить аудио приложение. Иногда, при переключении с другого
драйвера на ASIO4ALL v2, предыдущий драйвер не освобождает аудио оборудование. Если это USB/PCMCIA/FireWire устройство, закройте панель управления ASIO4ALL, отключите устройство, включите повторно и снова откройте панель управления ASIO4ALL. Изменения, сделанный в панели управления, не передаются на другие приложения ...И при этом они не передаются между разными пользователями системы! Это не ошибка, это такая особенность! ASIO4ALL v2 запоминает настройки для каждого приложения/пользователя! Это даёт возможность запускать несколько копий ASIO4ALL одновременно, если они не используют одно и то же аудио оборудование.
Выводы
Эта
статься является обзорной, в ней я не даю никаких рекомендаций.
Основной целью является знакомство начинающих (и не только) музыкантов
с компьютерными интерфейсами для творчества. Мне не хотелось бы
убеждать что какой либо интерфейс лучше другого. Я просто хочу обратить
внимание, что все они предназначены для разных целей, хотя и могут
использоваться в смежных областях. Microsoft Multimedia, например,
морально устарел и больше не соответствует современным требованиям к
функциональности. DirectSound – наиболее многофункциональный стандарт.
Он подходит как для игр, так и для работы с музыкальными программами.
Но, как известно, чем сложнее система, тем больше вероятность отказа.
Здесь, правда, корректнее говорить не об отказе, а о применимости. ASIO
же, в отличии от двух своих уже упомянутых собратьев, строго направлен
на профессиональную работу с цифровым аудио. Об этом говорит его
архитектура и функциональность.
|