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.
Динамический диапазон
Нелинейные искажения + шум (при уровне -3 дБ)
Интермодуляционные искажения
На самом то деле опция Dither в плеере foobar2000 это даже не дизеринг (dithering), это нойз шейпинг (noise shaping), то есть алгоритм который более продвинутый. В теории нойз шейпинг нужен для улучшения звучания, который уводит искажения из среднечастотной области в высокочастотную область. Весь этот эффект основан на том, что, во-первых, зачастую акустика, скажем, невысокого класса имеет довольно таки сильный завал на краях слышимого диапазона, во-вторых, чувствительность нашего слуха в зависимости от частоты - довольно таки неравномерная, максимум слуха приходит на среднечастотную область, а в-третьих, искажения звука субъективно на среднем диапазоне воспринимаются намного лучше, чем искажения на высоких частотах. Но в этом тесте видно, что опция использована не к месту и общую картину, скорее всего, только ухудшает.
Тест № 3. DirectSound 16-bit output против DirectSound 24-bit output.
Динамический диапазон
Нелинейные искажения + шум (при уровне -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.
Динамический диапазон
Нелинейные искажения + шум (при уровне -3 дБ)
Интермодуляционные искажения
Голубой и зелёный графики совпали полностью. Изменение громкости в микшере на результат KernelStreaming вообще никак не влияет, потому что Kernel Streaming обходит микшер системы, а вотDirectSound нет. Поэтому результат с DirectSound стал немного хуже, но сравнивать их между собой теперь не совсем правильно, потому что уровень громкости принял изменения только для DirectSound.
Тест № 5. DirectSound 16-bit output против DirectSound 16-bit output + Dither, -2dB.
Динамический диапазон
Нелинейные искажения + шум (при уровне -3 дБ)
Интермодуляционные искажения
Тут нойз шейпинг делает именно то, для чего он и предназначен. Хотя с одной стороны, судя по абсолютным цифрам видно что искажения возросли, и довольно таки значительно. Но если посмотреть с другой стороны, судя по графикам видно то, что включение опции Dither увело искажения в область высоких частот за 15 кГц. И поэтому вопрос включать или не включать, скажем так, неоднозначный, включение этой опции дает как плюсовые, так и минусовые результаты при различных сочетаниях в звуковой цепочке, также включая уши слушателя.
Тест № 6. DirectSound 16-bit output против DirectSound 24-bit output, -2dB.
Динамический диапазон
Нелинейные искажения + шум (при уровне -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".