Многие задаются вопросом выбора программного аудиоплеера. А определившись с плеером, начинают терзаться сомнениями, какому интерфейсу отдать предпочтение для прослушивания музыки - DirectSound, Kernel Streaming, ASIO, а может быть, WASAPI? Сегодня я попробую сравнить вывод звука в популярном плеере foobar2000 через интерфейсы DirectSound и Kernel Streaming.
Идей для написания статьи послужило высказывание участника форума 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.
Автор: Павел Селиванов
Источник: http://spvd.ru