Foobar2000: DirectSound против Kernel Streaming

У многих возникают трудности при выборе программного аудиопроигрывателя. А после того, как определились с проигрывателем, начинают терзать себя сомнениями, какой интерфейс выбрать для прослушивания любимой музыки - DirectSound или Kernel Streaming, ASIO, или даже WASAPI? Сегодня я сделаю попытку сопоставить вывод звука в одном из популярнейших проигрывателей - foobar2000, с помощью таких интерфейсов как Kernel Streaming и DirectSound.

Статус программы Бесплатная
Операционная система Windows 10, 8.1, 8, 7, XP
Интерфейс Русский и английский
Разработчик Peter Pawlowski
Категория программы Плееры

Идеей для создания этой статьи стало словоизлияние участника форума 3DNews Dimmka в ветке Некоторые вопросы качества воспроизведения программных плееров:

«Народ, я задаюсь вопросом, через какой интерфейс foobar-ом лучше выводить звук для проигрывания музыки: Kernel Streaming, Direct Sound, WASAPI, ASIO? На просторах инета встречал в основном только общие фразы (возможно я плохо искал) типа: Kernel Streaming - это супер, ASIO - ещё лучше, kmixer - отстой и так далее. Какой либо сравнивающий тест этих плагинов к foobar-у я не смог найти, может кто сталкивался?»

Для старта возьмем только интерфейсы DirectSound и Kernel Streaming и проверим на них.

Методика тестирования

Измерения проводились с использованием тестового пакета RіghtMark Audio Analyzer 6.2.3 PRO. Запись в RMAA выполнялась через интерфейс ASIO, 32 bit с частотой 44,1 kHz.

Воспроизведение проводилось плеером foobar2000, версии 0.9.6.3 с подключенным к нему плагином Kernel Streaming Output 1.2.2.

Foobar-ом проигрывался сгенерированный в RMAA WAV-файл 16 bit частотой 44,1 kHz. Выбиралась такая частота дискретизации и битность по причине предположения, что пока большинство музыкальных материалов в таком виде хранятся на компьютерах .

При воспроизведении вышла одна заминка. При тестировании принимала участие звуковая карта ESIJuli@, драйвер версии 1.23 (Windows XP). Драйвер звуковой карты ESI Juli@ создаёт в системе 3 виртуальных устройства вывода, это: Juli@ Ch12, Ch34 и Ch1234. Каналы 1 и 2 соответствуют аналоговому выходу, 3 и 4 цифровому, а виртуальное устройство Juli@ Ch1234 служит для одновременного вывода сигнала через цифровые и аналоговые выходы.

По началу было предположение воспроизвести тестовый файл с помощью виртуального устройства Juli@ Ch12, которое соответствует аналоговому выходу, ну а воздействие аналоговой части звуковой карты устранить с помощью функции DirectWIRE реализованной в драйвере ESI. Но в результате попытки воспроизвести через интерфейс Kernel Streaming и устройство Ch12 плеер фубар выдавал ошибку:

Вследствие этого для интерфейса Kernel Streaming тестовый файл понадобилось проигрывать через устройство Juli@ Ch1234.

Kernel Streaming 16-bit

Direct Sound в фулбаре такой проблемы не создавал, но в DirectWIRE для Ch12 и Ch1234 нужно было соединять различные интерфейсы драйвера.

DirectWARE для Juli@ Сh12

DirectWARE для Juli@ Сh1234

Дополнительный тест который был проведен, показал что отсутствует любая разница, но в результате для всех тестов было решено выбрать виртуальное устройство Juli@ Ch1234 для вывода в проигрывателе foobar2000.

DirectSound 16-bit

DirectSound 16-bit Dither

DirectSound 24-bit

Громкость проигрывателя была поставлена на максимум, бегунок Wave, в микшере системы, в самом верхнем положении.

На вопрос почему отсутствует тест для Kernel Streaming 24-bit, отвечаю. Ну, во-первых, по той причине что Kernel Streaming с включенным 24-bit Output не заработал у меня (хотя нормально заработал с 32-bit), взамен нормального звука из колонок было слышно скрежет. Ну а во-вторых, по сути не было и цели детально разъяснить разницу помеж 16 и 24-bit, а только есть ли эффект от повышения разрешения в плеере при проигрывании 16-bit материала.

В процессе всего тестирования морально поддерживал кот Зухель.

Тестирование

Такие данные, как амплитудно-частотная характеристика и взаимопроникновение каналов в этом тесте не показательны. Интерес предоставляют исключительно динамический диапазон, нелинейные и также интермодуляционные искажения. Ну вот их мы и рассмотрим.

Тест первый. DirectSound 16-bit output против Kernel Streaming 16-bit output.

Тест DirectSound 16 Kernel Streaming 16
Динамический диапазон, дБ (А): 97.8 97.8
Гармонические искажения, %: 0.0004 0.0004
Интермодуляционные искажения + шум, %: 0.0035 0.0035

Динамический диапазон

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

Интермодуляционные искажения

Графики и цифры полностью идентичны. Интерфейс Kernel Streaming вообщето никаких преимуществ над DirectSound в принципе не произвел.

Тест № 2. DirectSound 16-bit output против DirectSound 16-bit output + Dither.

Тест

DirectSound 16

DirectSound 16 Dither

Динамический диапазон, дБ (А):

97.8

83.4

Гармонические искажения, %:

0.0004

0.0038

Интермодуляционные искажения + шум, %:

0.0035

0.040

Динамический диапазон

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

Интермодуляционные искажения

На самом то деле опция Dither в плеере foobar2000 это даже не дизеринг (dithering), это нойз шейпинг (noise shaping), то есть алгоритм который более продвинутый. В теории нойз шейпинг нужен для улучшения звучания, который уводит искажения из среднечастотной области в высокочастотную область. Весь этот эффект основан на том, что, во-первых, зачастую акустика, скажем, невысокого класса имеет довольно таки сильный завал на краях слышимого диапазона, во-вторых, чувствительность нашего слуха в зависимости от частоты - довольно таки неравномерная, максимум слуха приходит на среднечастотную область, а в-третьих, искажения звука субъективно на среднем диапазоне воспринимаются намного лучше, чем искажения на высоких частотах. Но в этом тесте видно, что опция использована не к месту и общую картину, скорее всего, только ухудшает.

Тест № 3. DirectSound 16-bit output против DirectSound 24-bit output.

Тест

DirectSound 16

DirectSound 24

Динамический диапазон, дБ (А):

97.8

97.8

Гармонические искажения, %:

0.0004

0.0004

Интермодуляционные искажения + шум, %:

0.0035

0.0035

Динамический диапазон

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

Интермодуляционные искажения

Разницы никакой. Если на сигнал не действовать никакими программными обработками, и в том числе также регулировкой громкости, включение в фубаре 24-bit вывода на изначальном 16-bit источнике, то никакого выигрыша это не даёт.

Промежуточные выводы

Судя по первой серии проводимых тестов можно сказать, что при смене в программном проигрывателе foobar-е интерфейса вывода с Direct Sound на Kernel Streaming и включение 24-bit вывода на 16-bit источнике особо никаких преимуществ нам не демонстрирует. А использование функции Dither в принципе скорее вредит.

Тогда скажите, откуда появляется столько откликов, которые гласят об улучшении качества звука от вывода его через Kernel Streaming, с включением 24 bit output или использования функций дизеринга инойз шейпинга? Также обратите Ваше внимание, для серии выше показанных тестов, уровень громкости в плеере и в микшере системы был поставлен на максимум, тоесть в 0 Дб. Отложим громкость в плеере пока в сторону (рассмотрению этого вопроса используется отдельная статья: Winamp и foobar2000, влияние программной регулировки громкости), и обратим Ваше внимание на микшер системы.

Для драйвера звуковой карты ESI Juli@, которая принимала участие в этом тестировании, максимальная позиция бегунка Wave в микшере системы равнялась нулевому изменению уровня сигнала. Но как показывает практика, такое происходит с драйверами не всех звуковых карт. Сымитируем аналогичную ситуацию, сдвинув бегунок так, чтоб уровень сигнала изменился примерно на -2 Дб (судя по показаниямRMAA) и опять повторим серию тестов.

Для лучего сравнения на графиках дополнительно будет присутствовать и результат DirectSound 16-bit из первой части тестирования.

Продолжение тестирования

Тест № 4. DirectSound 16-bit output против Kernel Streaming 16-bit output, -2dB.

Тест

DirectSound 16

Kernel Streaming 16

Динамический диапазон, дБ (А):

95.8

97.8

Гармонические искажения, %:

0.0008

0.0004

Интермодуляционные искажения + шум, %:

0.0044

0.0035

Динамический диапазон

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

Интермодуляционные искажения

Голубой и зелёный графики совпали полностью. Изменение громкости в микшере на результат KernelStreaming вообще никак не влияет, потому что Kernel Streaming обходит микшер системы, а вотDirectSound нет. Поэтому результат с DirectSound стал немного хуже, но сравнивать их между собой теперь не совсем правильно, потому что уровень громкости принял изменения только для DirectSound.

Тест № 5. DirectSound 16-bit output против DirectSound 16-bit output + Dither, -2dB.

Тест

DirectSound 16

DirectSound 16 Dither

Динамический диапазон, дБ (А):

95.8

83.3

Гармонические искажения, %:

0.0008

0.0040

Интермодуляционные искажения + шум, %:

0.0044

0.040

Динамический диапазон

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

Интермодуляционные искажения

Тут нойз шейпинг делает именно то, для чего он и предназначен. Хотя с одной стороны, судя по абсолютным цифрам видно что искажения возросли, и довольно таки значительно. Но если посмотреть с другой стороны, судя по графикам видно то, что включение опции Dither увело искажения в область высоких частот за 15 кГц. И поэтому вопрос включать или не включать, скажем так, неоднозначный, включение этой опции дает как плюсовые, так и минусовые результаты при различных сочетаниях в звуковой цепочке, также включая уши слушателя.

Тест № 6. DirectSound 16-bit output против DirectSound 24-bit output, -2dB.

Тест

DirectSound 16

DirectSound 24

Динамический диапазон, дБ (А):

95.8

97.8

Гармонические искажения, %:

0.0008

0.0004

Интермодуляционные искажения + шум, %:

0.0044

0.0035

Динамический диапазон

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

Интермодуляционные искажения

Включение 24 bit output для DirectSound впритык приближает результаты к DirectSound 16 bit из первой серии тестов (напоминаю, про полностью совпавший с результатом Kernel Streaming). Найти отличия между голубым и зелёным графиками возможно только в некоторых местах и при большом увеличении.

Выводы

Тут вспоминается один старый анекдот. Как-то ехали на поезде по Шотландии четверо ученых в одном купе: математик, астроном, физик и логик. И узрели они в окно одну черную овцу.

Астроном говорит: "Посмотрите, оказывается в Шотландии все овцы черные!".

Физик говорит: "Нет, у нас есть возможность утверждать только то, что в Шотландии только некоторые овцы черным цветом.".

Математик глаголет: "Нет, мы только знаем то, что в Шотландии есть одна черная овца как минимум есть .".

Логик: "Нет, ми знаем только то, что в Шотландии как минимум есть одна овца, и она черная ну как минимум с одной стороны!".

Из выше показанных результатов тестирования возможно сделать вывод, что если есть в наличии довольно таки качественная звуковая карта с также качественным драйвером, проигрывание музыкального материала с помощью интерфейса Kernel Streaming не даст преимуществ над DirectSound, при исполнении одного условия: соответствующие бегунки микшера системы должны быть поставлены на 0 Дб — обычно, это максимальное положение ползунка. Про отключенные звуки системы и отсутствие других запущенных в данный момент воспроизводяще-записывающих программ, я думаю, Вам и так все понятно.

Если это условие является трудновыполнимым, ну например, из-за проблем с драйвером, проявляющейся в том, что верхняя позиция бегунка микшера системы не соответствует 0-му изменению уровня громкости, или используются другие утилиты, которые регулируют громкость изменением уровней в микшере (ну например, утилиты для ТВ-тюнера), тогда для проигрывания музыки лучше использовать Kernel Streaming.

Если вдруг использование Kernel Streaming показано, но по каким-нибудь причинам задействовать его у Вас не получается (например, плеер выдаёт какую то ошибку или система начинает терять стабильность), то в проигрывателе foobar2000 есть возможность добиться близких результатов, включив Output data format 24-bit для DirectSound.

Если опять не повезло, и не функционирует Kernel Streaming и не можете включить 24 бита для DirectSound, то иногда плюсовой эффект может также дать включение в foobar2000 опции "Dither".