Windows представила уже давно новую серию API-интерфейсов для звука под названием CoreAudio, который включает в себя WASAPI (Windows Audio Session API), новый API для захвата и рендеринга аудио. Конечно, всегда были способы работы со звуком в предыдущих версиях Windows. И они все еще доступны в ХР, Vista, 7 и т.д., поэтому нет необходимости двигаться, если вы не хотите.
Оглавление:
Что случилось с WASAPI?
Вот основные варианты…
WinMM — это API-интерфейсы, которые существуют уже давно (например, функции waveOut … и waveIn …). Основным их ограничением является низкая задержка (трудно пропустить намного меньше 50 мс без отсева).
DirectSound — имеет свое применение, особенно для разработки игр, но, похоже, Microsoft также постепенно отказывается и от этого. Потоковое ядро — это то, что большинство профессиональных аудио приложений используют для прямой связи с драйвером WDM с минимальной задержкой.
ASIO — это модель аудиоинтерфейса Steinberg, используемая практически всеми профессиональными аудио приложениями, и, как правило, это лучший способ работать с очень малыми задержками. Производители звуковых карт Pro audio предоставляют драйверы ASIO.
Единственное его слабое место состоит в том, что вы можете использовать только один драйвер ASIO за раз, что потенциально может вызвать проблемы в будущем в виде все большего и большего количества студийного оборудования, такого как микрофоны, звуковые модули и мониторы (именно так называются динамики в мире профессионалов). аудио) поставляются с интерфейсами USB, а не со старой моделью подключения всех входов и выходов к одному аудиоинтерфейсу.
- Почему еще один аудио API?
- Так почему же Microsoft добавила WASAPI в список?
Во-первых, в Vista, ХР и далее появился совершенно новый механизм микширования звука, поэтому WASAPI дает вам возможность подключиться непосредственно к нему, а не проходить через уровень абстракции. Причины нового аудио движка:
- Переход к 32-битной с плавающей запятой, а не к 16-битной, что значительно улучшает качество звука при работе с несколькими аудиопотоками или эффектами.
- Переход от режима ядра к режиму пользователя с целью повышения стабильности системы (плохие драйверы не могут отключить систему).
Концепция конечных точек, а не аудиоустройств — для пользователей Windows проще отправлять звуки в «наушники» или записывать звук с «микрофона», а не требовать от них технической информации о звуковых картах, установленных в их системе
Группировка аудио потоков ВАСАПИ. Вы можете сгруппировать все аудиопотоки из одного приложения и отдельно контролировать их громкость. Другими словами, регулятор громкости для каждого приложения. Это немного сложнее, чем может показаться на первый взгляд, потому что некоторые приложения, такие как IE, содержат все виды процессов и плагинов, которые все воспроизводят звук по-своему. Во-вторых, предполагалось поддерживать приложения для профессионального аудио, которые должны быть как можно ближе к металлу, и сводить задержку к минимуму.
Изучаем WASAPI
Документация по WASAPI довольно скудна, несмотря на то, что Vista, ХР, 7 выпускаются уже давно. Так кто-нибудь на самом деле использует WASAPI? Ну, я использую множество профессиональных аудио приложений, каждое из которых предлагает пользователю выбор из множества API, и все же ни одно из них не добавило WASAPI в список. Даже Cakewalk , который, похоже, очень лоялен к Microsoft, придерживался потоковой передачи ядра для доступа к новой модели драйвера WaveRT, а не к использованию WASAPI.
Беда в том, что WASAPI не предлагает ничего такого, чего нет в WDM Kernel Streaming. А поскольку Windows XP,7 не выглядит так, как будто она очень долго не будет использоваться, написание нового приложения на основе WASAPI не имеет особого смысла.
Но как насчет чуть менее профессиональных аудио приложений?
Что делать, если кто-то пишет новое приложение, которое хочет каким-то образом работать с отдельными аудиосэмплами и способно работать только с Vista и выше. Могут ли они использовать WASAPI? Все зависит от того, сколько работы они готовы сделать …
Режимы рендеринга
WASAPI предоставляет две опции для рендеринга аудио — общий режим и эксклюзивный режим. В эксклюзивном режиме вы являетесь единственным приложением, с рассматриваемой конечной точкой звука — все другие приложения не могут создавать шум.
Это обеспечивает максимально возможную производительность, как и выбор всех профессиональных аудио приложений, таких как Cubase, SONAR, REAPER, Pro Tools и т. Д. Но, как я уже сказал, они не используют WASAPI. Они используют ASIO или Kernel Streaming.
Что есть в общем режиме. Это позволяет вам предоставлять доступ к конечной точке другим приложениям. Другими словами, вы все равно можете слышать звуки Windows и т. д. Конечно, когда вы разделяете конечную точку, одно приложение может захотеть воспроизводить звук с 24-битным стерео 48 кГц, а другое — с 16-битным моно 22 кГц. С WinMM API это не проблема — встроенные конвертеры преобразуют каждый аудиопоток в формат механизма микширования Windows.
Недостающая особенность WASAPI не предлагает преобразование частоты дискретизации. Другими словами, чтобы использовать общий режим, вы должны либо надеяться, что звуковой движок машины Vista настроен на точную частоту дискретизации вашего аудио, либо вы должны написать свой собственный преобразователь частоты дискретизации. И преобразование частоты дискретизации отнюдь не тривиально. Особенно, если ваши критерии таковы, что он не должен ухудшать качество звука и должен быть максимально быстрым.
С какой стати Microsoft не могла дать нам SRC, зачем нужен WASAPI?
Это повлияет на задержку (или, если быть более точным, нагрузка на процессор увеличится, что затруднит достижение меньших задержек). Но это считается само собой разумеющимся с общим режимом. Мы знаем, что когда мы совместно используем конечную точку, тогда SRC должен произойти где-то. Microsoft уже выполнила всё для создания настраиваемого и эффективного преобразователя частоты дискретизации.
Почему бы не позволить WASAPI подключить его автоматически (или хотя бы дать нам то, чтобы попросить WASAPI сделать для нас SRC)? В результате для продолжения взаимодействия с WASAPI .NET мне теперь нужно обернуть Audio Resampler DSP DMO (DirectX Media Object), который представляет собой совершенно новую банку червей (возможно, еще одно сообщение в блоге позже).
Будущее WASAPI
WASAPI придумали, чтобы остаться, но если он будет использоваться более широко, его нужно сделать более удобным для разработчиков. Я предполагаю, что вероятность того, что профессиональные аудио-компании будут смотреть на это больше, когда мы все перейдем на 64-битную Windows то, но она действительно сможет набрать обороты, если ее будет проще использовать в совместном режиме. Вот мои два предложения …
Построить преобразование частоты дискретизации в совместно используемом режиме (и эксклюзивном режиме для тех, кто использует частоты дискретизации, не поддерживаемые устройством) .