Тестирование методов вывода звука
Чем отличаются методы вывода звука и какой из них лучше использовать? Попытаемся разобраться…
Подопытные методы вывода звука:
- 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 это что?
Это вообще не метод вывода, а устройство (наушники или динамики — то, которое вы назначили по умолчанию для вывода звука)
Windows Default — устройство по умолчанию, согласно настройкам ОС. В AIMP-е, для каждого из методов вывода звука (за исключением ASIO), есть свой «Windows Default»
Ну у меня есть выбор или Realtek Hd или DirectSound: Windows Default вот так 🙂 а еще в другом плеере есть DirectSound8 audio slink или это одно и тоже Direct ? 🙂
Покажите лучше скриншоты
А чем можно сделать скриншоты?
Считаю необходимым сделать в AIMP вывод через WSAPI Exclusive. Сейчас для прослушивания lossless использую foobar2000, но один плеер лучше, чем два. Кстати, буду благодарен на ссылку с описанием тракта AIMP3, если таковая информация имеется.
> буду благодарен на ссылку с описанием тракта 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
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.
foobar2000: Kernel Streaming против DirectSound

Идей для написания статьи послужило высказывание участника форума 3DNews Dimmka в ветке Некоторые вопросы качества воспроизведения программных плееров:
«Народ, задался вопросом, через какой интерфейс Фубаром лучше выводить звук для прослушиваня музыки: Direct Sound, Kernel Streaming, ASIO, WASAPI? На просторох инета встречал только общие фразы (может плохо искал) вроде: Kernel Streaming — это супер, ASIO — ещё лучше, kmixer — отстой и т.д. Какой либо сравнительный тест этих плагинов к Фубару мне найти не удалось, может кто сталкивался?»
Для начала ограничимся только интерфейсами Kernel Streaming и DirectSound и проверим.
Измерения выполнялись с помощью тестового пакета RightMark Audio Analyzer 6.2.3 PRO. Запись в RMAA производилась через интерфейс ASIO, 32 bit 44,1 kHz.
Воспроизведение осуществлялось проигрывателем foobar2000 версии 0.9.6.3 с подключенным дополнительно плагином Kernel Streaming Output 1.2.2.
Проигрывателем воспроизводился cгенерированный в RMAA WAV-файл 16 bit 44,1 kHz. Выбор только этой битности и частоты дискретизации обусловлен предположением, что пока именно в таком виде находится большинство хранимых на компьютерах музыкальных материалов.
С воспроизведением возникла одна заминка. В тестировании участвовала звуковая карта ESI Juli@ с драйвером версии 1.23 (Windows XP). Драйвер звуковой карты ESI Juli@ создаёт в системе три виртуальных устройства вывода: Juli@ Ch12, Ch34 и Ch1234. Каналы 3 и 4 соответствуют цифровому выходу, 1 и 2 — аналоговому, а устройство Juli@ Ch1234 предназначено для вывода сигнала одновременно через аналоговые и цифровые выходы.
Так вот, изначально предполагалось воспроизводить тестовый файл через виртуальное устройство Juli@ Ch12, соответствующее аналоговому выходу, а влияние аналоговой части звуковой карты исключить с помощью реализованной в драйвере ESI функции DirectWIRE. Но при попытке воспроизведения через интерфейс Kernel Streaming и устройство Ch12 проигрыватель foobar выдавал ошибку:
Поэтому для Kernel Streaming тестовый файл пришлось воспроизводить через устройство Juli@ Ch1234.
Direct Sound в foobar подобной проблемы не вызывал, но в DirectWIRE для Ch12 и Ch1234 необходимо было соединять разные интерфейсы драйвера.
Проведённый дополнительный тест показал полное отсутствие какой бы то ни было разницы, но тем не менее для всех тестов решено было выбрать в проигрывателе foobar2000 для вывода виртуальное устройство Juli@ Ch1234.
Громкость в проигрывателе была выставлена на максимум, ползунок Wave в системном микшере в крайнем верхнем положении.
Почему нет теста для Kernel Streaming 24-bit? Во-первых, потому что Kernel Streaming со включенным 24-bit Output у меня не заработал (хотя заработал с 32-bit), вместо нормального звука из колонок раздавался скрежет. А во-вторых, не было цели детально выяснить разницу между 16 и 24-bit, а только выяснить, есть ли в принципе эффект от повышения разрешения в проигрывателе при воспроизведении 16-битного материала.
В процессе тестирования моральную поддержку оказывал кот Зухель.
Такие показатели, как амплитудно-частотная характеристика и взаимопроникновение каналов в данном тесте не показательны. Интересны только динамический диапазон, нелинейные и интермодуляционные искажения. Вот на них и посмотрим.
Тест первый. DirectSound 16-bit output vs Kernel Streaming 16-bit output .
| Тест | DirectSound 16 | Kernel Streaming 16 |
| Динамический диапазон, дБ (А): | 97.8 | 97.8 |
| Гармонические искажения, %: | 0.0004 | 0.0004 |
| Интермодуляционные искажения + шум, %: | 0.0035 | 0.0035 |
Цифры и графики абсолютно идентичны. Kernel Streaming никаких преимуществ перед DirectSound не показал.
Тест второй. DirectSound 16-bit output vs DirectSound 16-bit output + Dither .
| Тест | DirectSound 16 | DirectSound 16 Dither |
| Динамический диапазон, дБ (А): | 97.8 | 83.4 |
| Гармонические искажения, %: | 0.0004 | 0.0038 |
| Интермодуляционные искажения + шум, %: | 0.0035 | 0.040 |
На самом деле функция Dither в проигрывателе foobar2000 это не дизеринг (dithering), а нойз шейпинг (noise shaping), алгоритм более продвинутый. Теоретически нойз шейпинг призван улучшить звучание, уводя искажения из средних частот в высокочастотную область. Эффект основан на том, что, во-первых, часто акустика невысокого класса может иметь значительный завал на краях слышимого диапазона, во-вторых, чувствительность слуха в зависимости от частоты неравномерна, максимум приходится на средние частоты, а в-третьих, субъективно искажения на средних частотах воспринимаются намного острее, чем искажения на высоких. Но в данном тесте видно, что функция применена не к месту и картину, скорее, только ухудшает.
Тест третий. DirectSound 16-bit output vs DirectSound 24-bit output .
| Тест | DirectSound 16 | DirectSound 24 |
| Динамический диапазон, дБ (А): | 97.8 | 97.8 |
| Гармонические искажения, %: | 0.0004 | 0.0004 |
| Интермодуляционные искажения + шум, %: | 0.0035 | 0.0035 |
Никакой разницы. Если к сигналу не применяются никакие программные обработки, и в том числе регулировка громкости, включение в foobar2000 24-битного вывода на изначально 16-битном источнике никакого выигрыша не даёт.
По первой серии тестов можно сказать, что смена в программном плеере foobar2000 интерфейса вывода с Direct Sound на Kernel Streaming и включение 24 bit вывода на 16-битном источнике никаких преимуществ не демонстрирует. А задействование функции Dither вообще скорее вредит.
Тогда откуда столько откликов об улучшении звука от вывода через Kernel Streaming, включения 24 bit output или задействования функций дизеринга и нойз шейпинга? Обратите внимание, для серии тестов выше уровень громкости в проигрывателе и в системном микшере был установлен на максимум, т. е. в 0 Дб. Оставим громкость в проигрывателе пока в стороне (этому вопросу посвящена отдельная статья, Winamp и foobar2000, влияние программной регулировки громкости), и обратим внимание на системный микшер.
Для драйвера звуковой карты ESI Juli@, принимавшей участие в данном тестировании, максимальное положение ползунка Wave в системном микшере соответствует нулевому изменению уровня сигнала. Но практика показывает, что так происходит с драйверами не всех звуковых карт. Сымитируем подобную ситуацию, сдвинув ползунок так, чтобы уровень сигнала изменился приблизительно на -2 Дб (по показаниям RMAA) и повторим серию тестов.
Дополнительно для сравнения на графиках будет присутствовать результат DirectSound 16 bit из первой части тестирования.
Тест четвёртый. DirectSound 16-bit output vs Kernel Streaming 16-bit output , -2dB.
| Тест | DirectSound 16 | Kernel Streaming 16 |
| Динамический диапазон, дБ (А): | 95.8 | 97.8 |
| Гармонические искажения, %: | 0.0008 | 0.0004 |
| Интермодуляционные искажения + шум, %: | 0.0044 | 0.0035 |
Зелёный и голубой графики полностью совпали. Изменение громкости в микшере на результат Kernel Streaming никак не влияет, так как Kernel Streaming обходит системный микшер, а вот DirectSound нет. Поэтому результат с DirectSound стал несколько хуже, однако сравнивать их теперь стало не совсем корректно, поскольку уровень громкости изменился только для DirectSound.
Тест пятый. DirectSound 16-bit output vs DirectSound 16-bit output + Dither , -2dB.
| Тест | DirectSound 16 | DirectSound 16 Dither |
| Динамический диапазон, дБ (А): | 95.8 | 83.3 |
| Гармонические искажения, %: | 0.0008 | 0.0040 |
| Интермодуляционные искажения + шум, %: | 0.0044 | 0.040 |
Здесь нойз шейпинг делает то, для чего и предназначен. С одной стороны, по абсолютным цифрам искажения возросли, и значительно. Но с другой стороны, по графикам видно, что включение функции Dither увело искажения в высокочастотную область за 15 кГц. Поэтому включать или не включать — вопрос неоднозначный, включение этой функции может принести как положительные, так и отрицательные результаты при разных сочетаниях в цепочке звукового тракта, включая уши слушателя.
Тест шестой. DirectSound 16-bit output vs DirectSound 24-bit output , -2dB.
| Тест | DirectSound 16 | DirectSound 24 |
| Динамический диапазон, дБ (А): | 95.8 | 97.8 |
| Гармонические искажения, %: | 0.0008 | 0.0004 |
| Интермодуляционные искажения + шум, %: | 0.0044 | 0.0035 |
Включение 24 bit output для DirectSound вплотную приближает результат к DirectSound 16 bit из первой серии тестов (напомню, полностью совпавший с результатом Kernel Streaming). Обнаружить различия между зелёным и голубым графиками можно только в нескольких местах при большом увеличении.
Вспоминается старый анекдот. Ехали как-то по Шотландии на поезде в одном купе четверо ученых: астроном, физик, математик и логик. И увидели в окно черную овцу.
Астроном: «Посмотрите, в Шотландии овцы черные!».
Физик: «Нет, мы можем утверждать только, что в Шотландии некоторые овцы черные.».
Математик: «Нет, мы знаем только, что в Шотландии есть как минимум одна черная овца.».
Логик: «Нет, в Шотландии есть как минимум одна овца, черная как минимум с одной стороны!».
Из результатов тестирования можно сделать вывод, что при наличии качественной звуковой карты с качественным же драйвером, воспроизведение музыкального материала через интерфейс Kernel Streaming не дает преимуществ перед DirectSound, при выполнении одного условия: соответствующие ползунки системного микшера должны быть установлены в 0 Дб — как правило, это максимальное положение. Про отключенные системные звуки и отсутствие другого запущенного воспроизводяще-записывающего софта, думаю, и так понятно.
Если же это условие трудновыполнимо, например, из-за проблемы с драйвером, проявляющейся тем, что верхнее положение ползунков системного микшера не соответствует нулевому изменению уровня, или используются какие-либо программы, регулирующие громкость изменением уровней в микшере (к примеру, софт для ТВ-тюнера), тогда для прослушивания музыки целесообразно использовать Kernel Streaming.
Если использование Kernel Streaming показано, но по каким-либо причинам задействовать его не удаётся (например, проигрыватель выдаёт ошибку или система теряет стабильность), то в плеере foobar2000 можно добиться близких результатов, включив Output data format 24 бита для DirectSound.
Если не повезло, не работает Kernel Streaming и нельзя включить 24 bit для DirectSound, то в некоторых случаях положительный эффект может дать включение в foobar2000 функции «Dither».
И напоследок цитата с сайта foobar2000, что думают сами авторы проигрывателя о качестве воспроизведения:
Q: Does foobar2000 sound better than other players?
A: No. Most of «sound quality differences» people «hear» are placebo effect (at least with real music), as actual differences in produced sound data are below their noise floor (1 or 2 last bits in 16bit samples). foobar2000 has sound processing features such as software resampling or 24bit output on new high-end soundcards, but most of the other mainstream players are capable of doing the same by now.











































