Wasapi или asio что лучше?

Блог проекта AIMP

Анонсы / Планы / Заметки

Тестирование методов вывода звука

Чем отличаются методы вывода звука и какой из них лучше использовать? Попытаемся разобраться…

Подопытные методы вывода звука:

  • DirectSound
  • WASAPI (Shared Mode)
  • WASAPI (Exclusive Mode)
  • ASIO (ASIO4ALL)
  • Kernel Streaming

Конфигурация

  • Подопытный плеер: Foobar v1.1.11
    Он умеет выводить звук через все интересующие нас методы
  • ОС: Windows XP Pro SP3 Rus x86 / Windows 7 Ultimate SP1 Rus x86
    Windows XP добавлена к тестированию поскольку: KernelStreaming не работает на современных версиях ОС; Реализация DirectSound начиная с Windows Vista претерпела серьезные изменения
  • Звуковая карта: Virtual Audio Streaming
    Виртуальная звуковая карта позволяет исключить особенности железа и реализации драйверов к нему. В добавок к этому, нам будет проще списать с нее выходные данные
  • Настройки плеера и ОС: 44.1 кГц, 16 Бит/сэмпл, громкость 100%, эквалайзер и другие эффекты выключены

Методика тестирования
Для замеров я использовал RightMark Audio Analyzer (RMAA). В ней сгенерировал тестовый WAV-файл, со следующими характеристиками: 44.1 кГц, 16 Бит/сэмпл. Далее, воспроизводил этот файл в плеере, выбирая различные методы вывода звука, записывал выходной сигнал напрямую в файл и анализировал с помощью той же RMAA.

Тест1: В поисках побитово точного вывода

Первым делом решил протестировать так называемые «побитово точные» методы вывода — WASAPI Exclusive, Kernel Streaming и ASIO (посредством ASIO4ALL). Ходят мнения, поскольку эти методы обходят микшер Windows, то дают наиболее качественный, чуть ли не идеальный звук. Проверим!

Выходной поток будем сравнивать с входным с помощью RMAA, а так же побитово с помощью утилитки сравнения файлов. Поехали!

Нелинейные искажения + шум (при уровне -3 дБ)

Параметры одинаковые, графики совпали. Вроде можно говорить о побитово точном выводе. Но сравнивая входной и выходной файлы с помощью специальной утилитки — наткнулся на странный факт: для ASIO4ALL файлы абсолютно разные, хотя для WASAPI Exclusive и Kernel Streaming полное совпадение.

Причина оказалась в нелинейной фазочастотной характеристике (ФЧХ), а так же в присутствии фазовых задержек:

ASIO4ALL Фазовая задержка

Выводы
WASAPI Exclusive и Kernel Streaming действительно дают побитово точный вывод звука, а вот при использовании ASIO4ALL, формально, ни о каком побитовом выводе речи быть не может. Да, системный микшер ASIO4ALL обходит, но вносит в сигнал собственные искажения в виде нелинейной ФЧХ и фазовых задержек. С другой стороны — фазовые искажения (если они одинаковы во всех каналах) никак не воспринимаются на слух.

Тест2: Оставшиеся методы вывода звука

Нелинейные искажения + шум (при уровне -3 дБ)

Выводы
Что же мы видим? DirectSound в Windows XP оказался очень крут. Побитовое сравнение входного и выходного файла это подтвердило: файлы одинаковые! Честно говоря, я сам не поверил измерениям, но но два повторных измерения дали тот же результат. DirestSound в Windows XP выдает побитово точный вывод звука! Разумеется, это верно, если микшер не работает (отсутствуют другие системные или программные звуки) и системная громкость установлена на 100%.
Если сравнить Direct Sound Windows 7 и WASAPI — первый немного лучше. Но в общем и целом, оба метода вносят совершенно незначительные искажения в исходный сигнал. Едва ли со среднестатистическим оборудованием эту разницу возможно услышать.

Резюме

Что же мы имеем? А имеем мы вот что: три побитово точных метода вывода звука: DirectSound в (Windows XP), WASAPI Exclusive, Kernel Streaming (последний поддерживается считанными Плеерами). Кроме этого мы имеем ASIO (тот, который настоящий, не ASIO4ALL), который мне протестировать не удалось, да и поддерживается он ограниченным количеством устройств. И ещё мы имеем два метода вывода, которые вносят небольшие искажения в исходный сигнал: DirectSound Windows 7 и WASAPI Shared. Но, подчёркиваю, искажения эти настолько незначительны, что на слух их распознать можно лишь имея отнюдь недешевое оборудование.

Какой же метод вывода включить в Плеере?

  • Windows XP : однозначно DirectSound — отлично работает, не вносит искажений
  • Windows 7 : тут не всё однозначно. Для получения супер-качественного звука можно использовать WASAPI Exclusive или ASIO (при наличии поддержки). Но эти методы блокируют другие звуки в системе, что не всегда удобно. Гораздо удобнее использовать WASAPI или DirectSound.

Kernel Streaming советовать не буду. Пусть этот метод и крут, но его поддержку я встречал лишь у Foobar2000 на уровне «test», и этот метод не работает на ОС начиная с Vista.

Что касается ASIO4ALL : в Windows 7 мы действительно получим небольшое улучшение качества звука (если сравнивать с WASAPI или DirectSound), а вот в Windows XP выгода от использования минимальна: при отсутствии посторонних звуков, идущих на микшер, и 100% системной громкости — местный DirectSound выдает побитово точный звук.

Спасибо за внимание. Надеюсь кому-то данные исследования будут полезны.

Тестирование методов вывода звука : 14 комментариев

А Windows Default это что?

  1. soolo Автор записи 30 марта 2012 в 10:18

Это вообще не метод вывода, а устройство (наушники или динамики — то, которое вы назначили по умолчанию для вывода звука)

Windows Default — устройство по умолчанию, согласно настройкам ОС. В AIMP-е, для каждого из методов вывода звука (за исключением ASIO), есть свой «Windows Default»

Ну у меня есть выбор или Realtek Hd или DirectSound: Windows Default вот так 🙂 а еще в другом плеере есть DirectSound8 audio slink или это одно и тоже Direct ? 🙂

  1. soolo Автор записи 5 апреля 2012 в 9:16

Покажите лучше скриншоты

А чем можно сделать скриншоты?

  1. soolo Автор записи 5 апреля 2012 в 14:42

Считаю необходимым сделать в AIMP вывод через WSAPI Exclusive. Сейчас для прослушивания lossless использую foobar2000, но один плеер лучше, чем два. Кстати, буду благодарен на ссылку с описанием тракта AIMP3, если таковая информация имеется.

  1. soolo Автор записи 31 марта 2012 в 11:37

> буду благодарен на ссылку с описанием тракта AIMP3, если таковая информация имеется.
вот http://www.aimp.ru/blogs/?p=88

Попробовал в наушниках послушать FLAC через WSAPI Shared — звук отчётливо чище, особено высокие частоты, но загрузка процессора при этом на уровне 33%, причём 3-е из трёх ядер загружено «в потолок», через DirectSound нагрузка CPU 1-2%. WSAPI Exclusive — к сожалению протестировать не удалось, AIMP виснет, видимо дрова моего SB Audigy для 7-ки не тянут.

Direct Sound однозначно 🙂

Неплохая статья, которая развенчивает многие мифы по поводу суперкачества ASIO

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Hi-Fi и High-End техника или энциклопедия звука и видео

ЗВУКОМАНИЯ

Hi-Fi и High-End техника или энциклопедия звука и видео

WASAPI

WASAPI

WASAPI — это драйвер с низкой задержкой, когда он используется в монопольном режиме и напрямую взаимодействует с драйвером аудиоустройства. Это собственный ASIO от Microsoft.

WASAPI

ASIO является проприетарным протоколом. Вы можете использовать только то, что поддерживает ваше аудиоустройство.

WASAPI является неотъемлемой частью Windows (Vista, ХР, 7, 10 и выше).

В принципе это работает со всеми аудио устройствами.

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

АСИО

В эксклюзивном режиме никакое другое приложение не может использовать ЦАП или звуковую карту.

Нет больше системных звуков и даже на полную громкость в стерео!

скачать WASAPI + музыка во флак можно ЗДЕСЬ

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

  • Приложение, использующее WASAPI, может сделать это, настроив аудиоустройство в соответствии с источником.
  • В этом случае у нас почти идеальное воспроизведение.
  • Это позволяет автоматически переключать частоту дискретизации.
  • Автоматическое переключение частоты дискретизации и аппаратное обеспечение

Ustars_ЦАП + усилитель в классе А

В случае USB-ЦАП (с использованием драйверов основного режима) вы получаете автоматическое переключение частоты дискретизации с использованием эксклюзивного WASAPI.

  • Большую часть времени встроенный звук позволяет автоматически переключать частоту дискретизации.
  • Многие дискретные звуковые карты не допускают автоматического переключения с использованием WASAPI.
  • Если дискретная звуковая карта поставляется с ASIO, лучше использовать этот драйвер, если вы хотите автоматическое переключение частоты дискретизации.
  • Разработчик также может выбрать источник информации о возможностях аудиоустройства.
  • Если источник монофонический, а аудиоустройство 2-канальное, пользователь может решить отправить один и тот же сигнал на оба канала.

Если частота дискретизации источника не поддерживается аппаратными средствами, например, источником 192 кГц с аудиоустройством 96 кГц, программа, использующая WASAPI, должна выполнить SRC (преобразование частоты дискретизации).

Это можно сделать, вызвав SRC, предоставленный Windows, или тот, который предоставлен приложением.

Аудио архитектура Windows начиная с Виста и далее

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

Плюсы аудио движка:

Переход к 32-битной с плавающей запятой, а не к 16-битной, что значительно улучшает качество звука при работе с несколькими аудиопотоками или эффектами.

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

Концепция конечных точек, а не аудиоустройств — для пользователей Windows проще отправлять звуки в «наушники» или записывать звук с «микрофона», а не требовать от них технической информации о звуковой карте, установленной в их системе.

Группировка аудио потоков

В Vista, ХР и выше вы можете сгруппировать все аудиопотоки из одного приложения и отдельно контролировать их громкость. Другими словами, регулятор громкости для каждого приложения. Это немного сложнее, чем может показаться на первый взгляд, потому что некоторые приложения, такие как IE, содержат все виды процессов и плагинов, которые все воспроизводят звук по-своему.

  • По умолчанию все звуки отправляются в микшер.
  • Микшер преобразует звук в 32-битное число с плавающей запятой и выполняет микширование.
  • Результат прерывается и преобразуются обратно в формат, который принимает аудиодрайвер (в большинстве случаев это 16 или 24 бит).

WASAPI

Приложения, плееры отправляющие звук на микшер, должны следить за тем, чтобы частота дискретизации соответствовала частоте микшера по умолчанию. Это значение по умолчанию установлено на вкладке «Дополнительно» в звуковой панели.

Даже если источник соответствует частоте дискретизации по умолчанию, применяется сглаживание.

Если вы не применяете какие-либо эффекты для каждого потока или глобальные эффекты и

слушаете только одно приложение, выводящее звук, и частота дискретизации и битовая глубина, установленные для Ц, соответствуют частоте дискретизации материала, то теоретически не должно быть никакой разницы с оригиналом, потому что преобразование даже из 24-разрядного целого числа в 32-разрядное число с плавающей запятой без потерь.

foobar2000 Wasapi

Эксклюзивный режим ВАСАПИ

  • WASAPI в эксклюзивном режиме обходит аудио движок (микшер).
  • Преобразование в 32 применяемое микшером, исключаются.
  • Он также блокирует аудиодрайвер; никакое другое приложение не может использовать аудиоустройство.
  • Общий режим
  • Это эквивалентно DS (Direct Sound).
  • Весь звук отправляется на микшер.
  • Приложение должно вызывать преобразование частоты дискретизации, если частота дискретизации отличается от значения, установленного на аудио-панели win.
Читайте также  Коаксиальный кабель или оптический что лучше?

Ustars ЦАПы + 11.28 ЦАПРЕ

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

Панель управления звуком задает требуемую частоту дискретизации в качестве «Формат по умолчанию». Формат по умолчанию определяет формат, который используется для предоставления контента аудиоустройством. Количество каналов, которые поддерживает Audio Engine, обычно является количеством АС для аудиоустройства.

Изменение частоты дискретизации и глубины в битах данных называется преобразованием частоты дискретизации. Приложение может решить написать свой собственный преобразователь частоты дискретизации. В качестве альтернативы, приложение может решить использовать API-интерфейсы, такие как PlaySound, WAVE, цифровой интерфейс музыкальных инструментов (MIDI) или микшер. В этих API преобразование происходит автоматически. Когда это необходимо, проигрыватель Windows Media выполняет преобразование частоты дискретизации в своем внутреннем конвейере Media Foundation.

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

Релейный предусилитель обзор

WASAPI можно использовать в режиме push и в режиме pull (стиль события).

  • У пары асинхронных ЦАП USB были всевозможные проблемы с использованием режима push из-за проблем с буфером в WASAPI.
  • Это было решено с помощью стиля WASAPI — Event.
  • Звуковое устройство извлекает данные из системы.
  • Большую часть времени вы не можете выбрать режим. Это просто зависит от того, как программист реализовал WASAPI в плеере.
  • Разница между выполнением push и выполнением события заключается только в том, что отвечает за то, когда хост должен отправлять звук на оборудование.

На основе событий:

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

На основе push:

  • Хост сообщает API, что он cообщит, когда наступит подходящий момент для отправки аудио.
  • Хозяева готовят аудио, чтобы он был готов, когда API готов.
  • Хосты спрашивают API, готов ли он.
  • Если он не готов, ждет некоторое время и снова спрашивает
  • Когда API отвечает, что он готов, хост отправляет подготовленный буфер. Он также может подготовить буфер в это время и отправить его.

WASAPI — Стиль события

Режим вывода позволяет звуковому устройству извлекать данные из плеера. Этот метод поддерживается не всеми аппаратными средствами, но рекомендуется при его поддержке.

WASAPI — Event Style имеет несколько преимуществ:

  • Это позволяет аудиоподсистеме извлекать данные (когда установлены события) вместо передачи данных в систему. Это позволяет уменьшить размер буфера задержки и удалить ненадежный слой Microsoft.
  • Он создает, использует и уничтожает все интерфейсы WASAPI из одного потока.
  • Аппаратное обеспечение (или интерфейс WASAPI) никогда не видит паузы или сброса вызовов. Вместо этого, в режиме паузы или сброса тишина подается в тянущую петлю. Это устраняет необходимость в хакерских атаках для карт, окружающих свои буферы при паузе, сбросе и т. д. (ATI HDMI и т. д.).
  • Это позволяет получить более прямой путь передачи данных к драйверу / оборудованию.
  • Основной «цикл извлечения» использует круговой буфер без блокировки (система, которую Дж. Ривер построил для ASIO), так что полное выполнение запроса извлечения выполняется максимально быстро.

Для использования WASAPI требуется плеер, поддерживающий этот драйвер в эксклюзивном режиме.

Я думаю, что эксклюзив WASAPI немного более прозрачен по звуку, чем DS (Direct Sound), аудио-движок Win по умолчанию.

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

Советы по АСИО и ВАСАПИ

  1. Настройте медиаплеер для WASAPI и DS и выполните тест прослушивания.
  2. Если вы не слышите разницу, придерживайтесь DS.
  3. Если вы слышите разницу, используйте тот, который вы предпочитаете.
  4. WASAPI вообще не работает с дискретными звуковыми картами.
  5. В случае с USB ЦАП это лучший путь качеств.звука.

ЦАП 11.38 + ТДС 5

ИТОГИ. WASAPI — это интерфейс с низкой задержкой для драйвера аудиоустройства.

Обход микшера — это все, что он делает. Разработчик или пользователь приложения, использующие WASAPI, должен убедиться, что свойства аудиофайла + плеера и возможности аудиоустройства (внешний ЦАП) совпадают.

Как правильно слушать музыку на компьютере – настраиваем Foobar2000

Для компьютера существует множество плееров, но истинно «аудиофильских» можно пересчитать по пальцам. У слушателей разные приоритеты, одним нужен исходный звук без какой-либо обработки, другим приукрашенный звук. В материале пойдет речь о первой категории плееров на примере foobar2000 под Windows 7 (настройки для Windows 10 аналогичны).

Путь звука от файла до ЦАП

Каким требованиям должен удовлетворять плеер? Прежде всего должна быть поддержка вывода звука как минимум через один интерфейс: WASAPI (Exclusive) или ASIO. Остальные требования — это возможность отключения внутренних обработок звука.

Для Windows это:

  • Foobar2000
  • AIMP
  • Album Player

Рассмотрим путь звука от файла до ЦАП звукового интерфейса (звуковой карты или внешнего ЦАП).

Схема максимально упрощена

WASAPI

Плеер отвечает за декодирование файла и передачу в систему через один из интерфейсов, MME или ASIO. MME – это звуковая подсистема Windows, которая используется по умолчанию во всех плеерах и программах (аудио плеерах, видео плеерах, браузерах, Skype, играх и прочих программах). В MME интерфейсе есть отдельный режим WASAPI Exclusive, который позволяет обойти ресемплер и микшер Windows.

Просмотр видео с выводом звука через WASAPI возможен в плеере Light Alloy

При воспроизведении из под WASAPI звук на выходе возможен только от одного проигрывателя (программы), все остальные звуковые потоки будут в режиме «mute». Некоторые программы могут выдать ошибку, что «звуковое устройство недоступно». В профессиональных картах возможно одновременное воспроизведение звукового потока из WASAPI и ASIO, т.к. звуковые потоки обходят микшер Windows, но после попадают в драйвер звукового устройства и далее смешиваются микшером звуковой карты. Там, где ASIO сделано через WASAPI, могту быть различные проблемы со стабильностью работы.

Для того, что бы на выходе получить звук одновременно от нескольких программ, его надо привести в единую сетку разрядности и частоты дискретизации, а потом все потоки просуммировать. В прошлом поколении ОС XP для MME существовал автомат опорной частоты и при воспроизведении звука лишь из одной программы отключался ресемплинг, системный микшер не вносил никаких существенных изменений в звуковой поток. В Windows 7 все работает принудительно, независимо от количества программ, воспроизводящих звук. Автомат опорной частоты возможен только для WASAPI и ASIO при соответствующей поддержке драйвера звукового устройства.

ASIO – это профессиональная звуковая подсистема для программ с обработкой звука от Steinberg. Основным преимуществом ASIO является возможность получить ультранизкие задержки звукового сигнала, которые позволяют обрабатывать звук в режиме реального времени при игре вживую на midi инструментах.

Через ASIO звуковой поток направляется в обход микшера Windows.

ASIO поддерживают не все звуковые карты, в то время как WASAPI все.

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

Что может лишнего делать драйвер звукового интерфейса? Тоже самое, что и микшер Windows – ресемплинг и микширование каналов. Лучше не поленится и изучить внимательно настройки звуковой карты для оптимального вывода звука.

Плеер Foobar2000

Одним из самых популярных был и остается плеер Foobar2000. Если в старые добрые времена Foobar2000 был альтернативой Winamp, то сейчас вместо Winamp популярен AIMP.

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

К сожалению, Foobar2000 скачивается в базовой комплектации, в которую поддержка WASAPI и ASIO не входят. Их надо скачать отдельно со страницы компонентов.

Установка и настройка foobar2000

  • Устанавливаем foobar2000
  • Запускаем скачанные компоненты. В последних версиях необходимо просто запустить скачанные файлы и их foobar2000 автоматически в себя добавит. В старых версиях их надо было вручную добавлять в папку программы

Плеер можно скачать с официального сайта http://www.foobar2000.org/

Теперь настраиваем foobar2000

Проверяем, что во вкладке эффектов (Active DSPs) пусто.

Теперь выбираем интерфейс (звуковую карту или ЦАП) для воспроизведения.

Без загруженных в foobar2000 плагинов WASAPI и ASIO будет доступен только DS. WASAPI делятся на event и push – принципиальной разницы между ними нет. При выборе ASIO или WASAPI используйте любой вывод, который работает более стабильно. У меня на практике WASAPI чаще работает стабильнее. Причиной является то, что ASIO хорошо работает в основном в профессиональных устройствах, а в бытовых устройствах реализация ASIO формальная.

Вывод звука через WASAPI

Если под WASAPI звуковой интерфейс не поддерживает автомата опорной частоты, то частота семплирования в Windows должна совпадать с частотой дискретизации музыкального файла, иначе будет ошибка при воспроизведении. Дополнительно надо учесть, что частота воспроизведения музыкального файла должна поддерживаться звуковым устройством. Например, если максимальная поддерживаемая частота у ЦАП равна 96 кГц, то файл с частотой дискретизации в 192 кГц напрямую воспроизводится не будет. Для таких файлов необходимо использовать принудительный ресемплинг.

Разрядность сигнала необходимо выбирать в соответствии с разрядностью драйвера, обычно это 24 бит. Некоторые устройства не будут работать, если будет выбрана неверная разрядность, например Audiolab M-DAC понимает только 24 бит. Если есть поддержка как 16, так и 24 бит – лучше выбрать 24 бит.

Для ЦАП без поддержки 24 бит, или мультибитов, где микросхема ЦАП физически поддерживает только 16 бит, на вывод надо ставить 16 бит с активированным диттером при воспрозведении звуковых файлов с разрядностью выше 16 бит.

Вывод звука через ASIO

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

По умолчанию foobar2000 показывает доступные драйвера ASIO. Что бы ими можно было воспользоваться, надо создать дополнительную конфигурацию через кнопку «Add New».

Читайте также  УРСА или изовер что лучше?

Здесь задается название и выбирается драйвер устройства.

Здесь назначается маршрутизация каналов, обычно по умолчанию стоят правильные настройки.

Цифровой аудиотракт: апсемплинг и апскейлинг, WASAPI, ASIO и внешний мастер клок для USB-аудио

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

Basic

Звуковой сигнал, в общем случае, кодируется последовательностью значений амплитуды сигнала, измеренных через равные промежутки времени. Единичное значение амплитуды называют сэмплом, а время между двумя соседними измерениями — частотой дискретизации или частотой квантования. В подавляющем большинстве случаев сэмпл при передаче на аудиоустройство описывают знаковым целым числом — разрядности 16, 24 или 32 бита. Разрядность в 32 бита может быть использована для выравнивания буфера устройства по границе двойного слова, тогда семпл кодируется только первыми 24 битами, или же для полноразрядного кодирования. Первый вариант доступен в ASIO и WASAPI, второй только в WASAPI.

Максимально достижимое соотношение сигнал/шум определяется разрядностью сэмпла и вычисляется как 20log(2^q) где q — разрядность сэмпла.

16 бит — диапазон сэмпла [−32768, 32767], SNR 96.33 дБ
24 бит — диапазон сэмпла [−8388608, 8388607], SNR 144.49 дБ
32 бит — диапазон сэмпла [−2147483648, 2147483647] , SNR 192.66 дБ

Частоты дискретизации (количество сэмплов в секунду для одного канала) из-за взаимной кратности стоит выписать в два набора: <44100, 88200, 192000>и <48000, 96000>. Два набора частот приводят к тому, что аудиоустройству нужно два осциллятора для качественной синхронизации. Конечно, можно использовать и один с кратной частотой, например, как 88200, так и 96000 Гц, но это существенно повышает сложность исполнения точного тактового контура.

Вывод: качественное аудиоустройство должно иметь два осциллятора, один для работы с частотами <44100, 88200>, второй для <48000, 96000, 192000>.

При обработке цифрового сигнала (DSP — digital sound processing) сэмпл масштабируется как минимум к 64-битному числу с плавающей точкой (double64) в диапазоне от –1 до 1. Наиболее часто применяются преобразования upsampling/downsampling и upscale/downscale. Второе заключается в изменении разрядности сэмпла и в подавляющем большинстве реализаций сводится к простому масштабированию 64-битного double к желаемой битовой разрядности. Данное преобразование помимо масштабирования полезного сигнала делает точно такое же масштабирование и шума, поэтому upscale не меняет соотношение сигнал/шум исходного сигнала, а downscale дополнительно увеличивает долю шума за счет деградации разрядности полезного сигнала.

Upsampling/downsampling очень часто выполняется через решения полинома n-го порядка (как правило, кубического). Берется последовательность из K-сэмплов, и из них рассчитываются коэффициенты интерполирующего полинома, затем полученный полином решается для новых точек семплирования. В идеальном случае, согласно теореме Найквиста-Котельникова, upsampling может только сохранить разрешение исходного сигнала на новой частоте семплирования. В неидеальном случае возможно появления шума на высших гармониках. Интересно, что downsampling после upsampling вернет исходное значение сигнала, даже если после upsampling в нем появились искажения и шум.

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

Еще один случай обработки DSP — это convolution (свертка), применимая для адаптации сигнала под акустические свойства комнаты. Здесь исходный сигнал разлагается на гармоники в ряд Фурье до n-го порядка. К сожалению, все быстрые алгоритмы как правило работают с амплитудой сигнала определенной частоты без учета фазы (которую еще очень непросто правильно измерить). Более того, быстрые алгоритмы не решают интеграл, а берут среднее значение в диапазоне. В результате вся коррекция сводится к параметрическому эквалайзеру. Простые полосные фильтры вносят фазовые искажения на частотах разделения, из-за этого параметры convolution нужно еще раз и еще раз подстраивать.

MQA на высоких гармониках, на мой взгляд, инкрементально кодирует первую производную (наклон) функции амплитуды сигнала. Зная частоту гармоник кодировки, простым разложением в ряд Фурье очень просто вытащить и восстановить поведение производной. А имея производную, можно уже делать upsampling не полиномами, а сплайнами со сглаживанием. Вот тогда, уже в реальном времени, можно делать upsampling и upscale с увеличением разрешения и динамического диапазона сигнала. Конечно, это не будет оригинальный Hi-Res, но уже кое-что.

Выводы: Upscale не улучшает соотношение сигнал/шум. Upsampling не улучшает разрешения сигнала. Upsampling имеет смысл для перехода от линейки 44100 к 48000, если осциллятор Вашего устройства лучше для 48000. Использование room correction требует итеративной настройки и, во многом, непредсказуемо.

Software player

Я ограничусь рассмотрением Windows-архитектуры, как наиболее доступной и наиболее оптимальной для создания цифрового транспорта. Windows предоставляет три варианта доступа к аудиоустройству: Kernel Streaming, Direct Sound, WASAPI. Плюс подавляющее большинство аудиоустройств поставляются с ASIO-драйвером. Из перечисленных способов только Direct Sound и ASIO являются полноценными аудиоинтерфейсами с возможностями DSP: upsampling/downsampling, upscale/downscale, управлением громкостью и микшированием. Кроме того, ASIO имеет возможность расширения аудиотракта за счет плагинов.

Kernel Streaming и WASAPI являются протоколами низкого уровня для управлений различными устройствами, в том числе и аудио. При этом тяжесть любой DSP-обработки сигнала ложится на программный плеер, использующий эти протоколы. Современные высококачественные программные плееры используют в работе WASAPI и/или ASIO, поскольку оба они предоставляют возможность асинхронной передачи аудиоданных из памяти компьютера в память аудиоустройства.

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

WASAPI и ASIO имеют практически идентичный принцип работы: плеер подготавливает данные в буфере обмена и указывает протоколу адрес этого буфера, затем он подготавливает следующий буфер и ждет пока протокол не закончит обработку первого. Поскольку процесс подготовки данных и их воспроизведение идут параллельно, то протоколы называют асинхронными. WASAPI в отличие от ASIO имеет два режима работы.

Первый режим — «совместное использование» устройства, когда несколько процессов одновременно могут передавать данные устройству. Второй режим — «эксклюзивный», когда устройство блокируется для монопольного использования только одной программой (одним клиентом). ASIO работает исключительно в эксклюзивном режиме. С точки зрения воспроизведения разницы между WASAPI и ASIO не существует, кроме разве что возможности передачи по WASAPI полноразрядного 32-битного семпла (ASIO если и будет поддерживать такой режим, то все равно будет использовать только первые 24 бита из 32).

Как было отмечено выше, upscale не улучшает соотношение сигнал/шум и, поскольку полноразрядного 32 исходного файла я ни разу не встречал, то и здесь нет никакой разницы между WASAPI и ASIO. Тем не менее, я как программист и как слушатель предпочитаю WASAPI, естественно, в эксклюзивном режиме. Но это дело исключительно вкуса и личных симпатий.

Вывод: если Вы (как и я) воспроизводите аудиосигнал без DSP-обработки, то Вы можете использовать любой (*) программный плеер, поддерживающий WASAPI Exclusive и/или ASIO.

(*) смотри внимательно следующий раздел.

USB Audio

Начну с хорошей новости для Windows: начиная с релиза 1703 включен нативный драйвер USB Audio 2.0.

USB-аудио может работать в трех режимах: асинхронном, синхронном и адаптивным. При асинхронном режиме источник устанавливает значение клока и передает это значение вместе с буфером данных на аудиоустройство. Оно должно синхронизироваться по полученному клоку, обработать буфер, используя свой клок, и послать подтверждение источнику.

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

Как видно, синхронный режим — самый требовательный, поскольку требует качественного клока как на источнике, так и на аудиоустройстве. Как правило, система работает в асинхронном режиме, а значит использует клок компьютера, качество которого не отвечает требованиям Hi-Fi и порождает огромный джиттер. Собственно говоря, это проблема породила кучу эзотерических плееров, которые перепрограммируют системный таймер, меряют скорость процессора, захватывают наибольший приоритет или вообще кладут компьютер в гибернативный режим.

Проблему это целиком не решает, но джитер снижается. Более приемлемый способ решения — это использование промежуточного буфера с реклоком. Это устройство не воспроизводит полученный буфер данных, а передает его дальше по цепочке, но уже с собственным временным кодом, полученным от собственного прецизионного осциллятора. Качество звука при этом существенно улучшается. На мой взгляд, из доступных буферов наиболее хорош Amanero, но можно использовать и XMOS с хорошим осциллятором.

Другое решение — это использование специализированного цифрового транспорта. В таком транспорте установлен качественный независимый выделенный осциллятор (как правило, два) для работы с частотами <44100, 88200, 192000>и для <48000, 96000>. Во всем остальном, это устройство намного примитивнее чем обычный компьютер. Как правило, при наличии опыта, очень качественный цифровой транспорт можно собрать самому на основе одноплатовых миникомпьютеров и софта Open Source. Поэтому цены на различные фирменные реализации цифрового транспорта меня реально шокируют.

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

Вывод: качество звука лучше улучшать не эзотерическим софтом, а железным цифровым буфером с реклоком. Самое правильное решение — это использование внешнего мастер клока

Wasapi или asio что лучше?

Что лучше asio или wasapi

Перейти к новому. Новенький Автор темы. Asio и прослушивание музыки. Меню пользователя nixer1 Посмотреть профиль Найти ещё сообщения от nixer1.

Поиск данных по Вашему запросу:

Схемы, справочники, даташиты:Обсуждения, статьи, мануалы:

Дождитесь окончания поиска во всех базах.
По завершению появится ссылка для доступа к найденным материалам

ПОСМОТРИТЕ ВИДЕО ПО ТЕМЕ: USB Audio Part 4: Optimising Windows

Цифровой аудиотракт: апсемплинг и апскейлинг, WASAPI, ASIO и внешний мастер клок для USB-аудио

Перейти к содержимому. У вас отключен JavaScript. Некоторые возможности системы не будут работать. Пожалуйста, включите JavaScript для получения доступа ко всем функциям. Отправлено 09 December — Отправлено 10 December — Система для сообществ IP. Board Лицензия зарегистрирована на: doctorhead. Назад Страниц 1 2. Сообщений в теме: 45 Полезный текст.

Прослушал КС. Вернулся к прежней схеме. Звук прозрачней, бас чище, тарелочки детальней. Звук пачкают. Где-то на форумах читал что ASIO частоту выше 48кГц начинает резать хрен его знает как и даже кортиночки были. Я так понял что по цифре. По этому и хотел попробовать Win7 и Wasapi. Но если rasweb утверждает что цифра в норме, то это хорошо. С увaжением, cyu.

KS лучше не надо. Но лучше всего думаю использовать ASIO — самый короткий путь к железу. KS вообще на Win7 работает? Так KS работает под Win7 или нет? Один говорит, что работает, другой что нет. Music Hall MMF Было Спойлер. Разговор на различные темы etya 1 Ответ Просмотров 06 January — Посл.

Количество пользователей, читающих эту тему: 0 0 пользователей, 0 гостей, 0 анонимных. Помощь Система для сообществ IP. Беспроводные наушники в магазине Dr. Войти Необходим аккаунт? Зарегистрируйтесь сейчас!

Я забыл свой пароль. Запомнить меня Это не рекомендуется для публичных компьютеров. Войти анонимно Не добавлять меня в список активных пользователей. Разговор на различные темы.

Стационарные и портативные ЦАПы. HUM Pervasion. Портативные плееры.

Качество звука в Windows 8 vs Windows7

Советы профессионала Желательно использовать наушники с сопротивлением не ниже Ом. С ноутбука лучше слушать музыку от аккумулятора, то есть отключенным от сети. MP3 лучше качать с качеством kbps joint stereo , такой формат используется в файлах сервиса Яндекс музыка. Настройка Windows. Ставим формат по умолчанию: 24 бит, Гц Студийная запись.

Дело в том, что протокол WASAPI в режиме Shared (режим по умолчанию) Весь этот junk нужно заставить звучать лучше, чем грохотание . ради отмечу, что разница между ASIO и WASAPI Exclusive не выходит.

Организация качественного вывода звука на компьютере (foobar2000 1.3.x, Windows XP, Vista/7/8/10)

Чем отличаются методы вывода звука и какой из них лучше использовать? Попытаемся разобраться…. тестирование методов звука в современных версиях Windows.

В ней сгенерировал тестовый WAV-файл, со следующими характеристиками: Далее, воспроизводил этот файл в плеере, выбирая различные методы вывода звука, записывал выходной сигнал напрямую в файл и анализировал с помощью той же RMAA.

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

Как правильно слушать музыку на компьютере – настраиваем Foobar2000

Баги вполне возможны и в драйверах производителя аудио интерфейса и в самой Windows. Поэтому не нулевой риск есть. По жалоб не видел, как и по предыдущей версии. Практически наверняка разницы не увидите совсем. Я всегда пользовался только нативными драйверами устройств в обход звукового ядра Windows, но все же звук W7, W8 и W10 в моем тракте был разный.

Какой на сегодня наиболее качественный по звучанию плеер лучший по функционалу? За это сообщение сказали спасибо: nedis.

foobar2000: Kernel Streaming против DirectSound

Это помогло устранить вашу проблему? Да Нет. К сожалению, это не помогло. Перейти к основному контенту. Сайт — обратная связь.

Таки foobar2000 через WASAPI играет зело лучше

Регистрация Выслать повторно письмо для активации Что даёт регистрация на форуме? Правила раздела «Программирование звука». Перед созданием темы подумайте, не будет ли она уместнее в разделах Разработка и тестирование программ , Наши исходники , а особенно Разовые заказы и подработки 1 На Раздел распространяются все Правила форума. Огромная просьба с ними внимательно ознакомиться. Также запрещено любое обсуждение p2p peer-to-peer сетей BitTorrent, eDonkey и т. В противном случае бессмысленно!

Страница 2 из 2 — ASIO vs windows-драйвер — отправлено в карты: ASIO отказался) и эквалайзером GEQ31V у меня звучит явно лучше. чистую победу) asio не работал вообще, wasapi передавал звук с.

Цифра цифрой, но в какой-то момент любители аудио столкнулись с утверждениями, что программные проигрыватели звучат по-разному. Стали субъективно оценивать воспроизведение на foobar, jriver, winamp, aimp, aplayer и развеиватели мифов сообщали, что слышат разницу, кому-то один проигрыватель заходил, кому-то другой.

Учитывая проприетарный код многих проигрывателей провести анализ и найти причины такого поведения мы не в силах, но помимо проигрывателя, в воспроизведении аудио участвует и часть операционной системы компьютера.

В разных операционных системах аудиосистема разная, и даже в одном семействе операционных систем могут использоваться разные методы взаимодействия с аудио.

Wasapi или asio что лучше?

Windows Vista introduced a new series of APIs for audio, called CoreAudio. This includes WASAPI (Windows Audio Session API), a brand new API for capturing and rendering audio.

Decisions, Decisions

Of course, there were always ways of dealing with audio in previous versions of Windows. And they are still available in Vista, so there is no need to move if you don’t want to. Here’s the main choices…

  • WinMM — these are the APIs that have been around for ages (e.g. the waveOut… and waveIn… functions). Their main limitation is poor latency (its hard to go much below 50ms without dropouts).
  • DirectSound — has its uses, particularly for game development, but it appears Microsoft is phasing this out too.
  • Kernel Streaming — this is what most of the pro audio applications use to talk directly to the WDM driver with minimal latency.
  • ASIO — This is a Steinberg audio interface model used by virtually all pro audio applications and is usually the best way to work at very low latencies. Pro audio sound card manufacturers provide ASIO drivers. Its one weakness is that you can only use one ASIO driver at a time, which has potential to cause issues in the future as more and more studio equipment such as microphones, sound modules and monitors (that’s what speakers are called in the world of pro audio) come with USB interfaces rather than the older model of plugging all your ins and outs into a single audio interface.

Why Yet Another Audio API?

So why has Microsoft added WASAPI to the list?

  • First, Vista has a completely new audio mixing engine, so WASAPI gives you the chance to plug directly into it rather than going through a layer of abstraction. The reasons for the new audio engine are:
    • A move to 32 bit floating point rather than 16 bit, which greatly improves audio quality when dealing with multiple audio streams or effects.
    • A move from kernel mode into user mode in a bid to increase system stability (bad drivers can’t take the system down).
    • The concept of endpoints rather than audio devices — making it easier for Windows users to send sounds to «headphones» or record sound from «microphone» rather than requiring them to know technical details about the soundcards installed on their system
    • Grouping audio streams. In Vista, you can group together all audio streams a single application and control their volume separately. In other words, a per-application volume control. This is a bit more involved than might be at first thought, because some applications such as IE host all kinds of processes and plugins that all play sound in their own way. Second, the intention was to support pro audio applications which needed to be as close to the metal as possible, and keep latency to a bare minimum. (see Larry Osterman’s Where does WASAPI fit in the big multimedia API picture?)

Learning WASAPI

Documentation on WASAPI is fairly sparse despite Vista being out for well over a year now. The best places at the moment to go are:

Who’s Using It?

So is anyone actually using WASAPI? Well, I use a variety of pro audio applications, each of which offer the user a selection from a variety of APIs, and yet none of them have added WASAPI to the list. Even Cakewalk, who seem to be very loyal to Microsoft, have stuck with kernel streaming to access the new WaveRT driver model rather than using WASAPI.

The trouble seems to be that WASAPI doesn’t offer anything that WDM Kernel Streaming doesn’t already, and since WASAPI is Vista only, there is no incentive to switch. And with Windows XP not looking it will go common usage for a very long time, writing a new application WASAPI doesn’t make much sense.

But what about slightly less pro audio applications? What if someone is writing a new application that wants to deal in some way with individual audio samples, and is able to target just Vista and above. Could they choose to use WASAPI? It all depends on how much work they are willing to do…

Rendering Modes

WASAPI gives two options for audio rendering — Shared mode and Exclusive mode. In exclusive mode, you are the only application talking to the audio endpoint in question — all other applications cannot make any noise. This gives the absolutely best performance possible, so would the choice of all pro audio applications Cubase, SONAR, REAPER, Pro Tools etc. But as I have already said, they are not using WASAPI. They are using ASIO or Kernel Streaming.

Which leaves us with shared mode. This allows you to share the endpoint with other applications. In other words, you can still hear your Windows sounds etc. Of course, when you share an endpoint, one application might want to play sound at 48kHz 24 bit stereo, while another wants to play it at 22kHz 16 bit mono. With the WinMM APIs, this is no problem — built in converters will convert each audio stream to the format of the Windows mixing engine.

The Missing Feature

Now I have been creating a set of .NET wrappers for WASAPI as part of my NAudio open source audio library. After the pain of writing the mountains of COM interop required to get .NET talking to WASAPI, I hit a brick wall. WASAPI does not offer sample rate conversion. In other words, to use shared mode, you must either hope that the Vista machine’s audio engine is set to the exact sample rate of your audio, or you must write your own sample rate converter. And sample rate conversion is by no means trivial. Especially if your criteria are that it must not degrade the audio quality and it must be as fast as possible.

Why on earth could Microsoft not have given us SRC with WASAPI? Sure latency will be affected (or to be more accurate, processor load will increase, making lower latencies harder to achieve). But this is taken for granted with shared mode. We know that when we are sharing the endpoint then SRC must occur somewhere. Microsoft already have done the R&D to create a configurable performant Sample Rate Converter. Why not let WASAPI plug it in automatically (or at least give us a flag to ask WASAPI to do SRC for us)?

The upshot of this is that for me to continue with my WASAPI .NET interop I now have to wrap the Audio Resampler DSP DMO (DirectX Media Object), which is a whole new can of worms (perhaps another blog post later).