spvd.ru
spvd.ru
Павел Селиванов. Статьи, обзоры, заметки

foobar2000: Kernel Streaming против DirectSound

Многие задаются вопросом выбора программного аудиоплеера. А определившись с плеером, начинают терзаться сомнениями, какому интерфейсу отдать предпочтение для прослушивания музыки - 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.

Окно RMAA

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

Установленные компоненты foobar2000

Проигрывателем воспроизводился 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 выдавал ошибку:

Ошибка, выдаваемая foobar'ом

Поэтому для Kernel Streaming тестовый файл пришлось воспроизводить через устройство Juli@ Ch1234.

Kernel Streaming 16-bitfoobar2000 KS 16-bit

 

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

DirectWARE для Juli@ Ch12

 

DirectWARE для Juli@ Ch1234

 

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

DirectSound 16-bitfoobar2000 DS 16-bit

 

DirectSound 16-bit Ditherfoobar2000 DS 16-bit Dither

 

DirectSound 24-bitfoobar2000 DS 24-bit

 

Громкость в проигрывателе была выставлена на максимум, ползунок 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 16Kernel Streaming 16
Динамический диапазон, дБ (А): 97.8 97.8
Гармонические искажения, %: 0.0004 0.0004
Интермодуляционные искажения + шум, %: 0.0035 0.0035

 

Динамический диапазонДинамический диапазон, DirectSound 16-bit output и Kernel Streaming 16-bit output

 

Нелинейные искажения + шум (при уровне -3 дБ)Нелинейные искажения + шум, DirectSound 16-bit output и Kernel Streaming 16-bit output

 

Интермодуляционные искаженияИнтермодуляционные искажения, DirectSound 16-bit output и Kernel Streaming 16-bit output

 

Цифры и графики абсолютно идентичны. Kernel Streaming никаких преимуществ перед DirectSound не показал.

 

Тест второй. DirectSound 16-bit output vs DirectSound 16-bit output + Dither.

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

 

Динамический диапазонДинамический диапазон, DirectSound 16-bit output и DirectSound 16-bit output + Dither

 

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

 

Интермодуляционные искаженияИнтермодуляционные искажения, DirectSound 16-bit output и DirectSound 16-bit output + Dither

 

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

 

Тест третий. DirectSound 16-bit output vs DirectSound 24-bit output.

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

 

Динамический диапазонДинамический диапазон, DirectSound 16-bit и 24-bit output

 

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

 

Интермодуляционные искаженияИнтермодуляционные искажения, DirectSound 16-bit output и DirectSound 16-bit и 24-bit output

 

Никакой разницы. Если к сигналу не применяются никакие программные обработки, и в том числе регулировка громкости, включение в 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 16Kernel Streaming 16
Динамический диапазон, дБ (А): 95.8 97.8
Гармонические искажения, %: 0.0008 0.0004
Интермодуляционные искажения + шум, %: 0.0044 0.0035

 

Динамический диапазонДинамический диапазон, DirectSound 16-bit output и Kernel Streaming 16-bit output

 

Нелинейные искажения + шум (при уровне -3 дБ)Нелинейные искажения + шум, DirectSound 16-bit output и Kernel Streaming 16-bit output

 

Интермодуляционные искаженияИнтермодуляционные искажения, DirectSound 16-bit output и Kernel Streaming 16-bit output

 

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

 

Тест пятый. DirectSound 16-bit output vs DirectSound 16-bit output + Dither, -2dB.

ТестDirectSound 16DirectSound 16 Dither
Динамический диапазон, дБ (А): 95.8 83.3
Гармонические искажения, %: 0.0008 0.0040
Интермодуляционные искажения + шум, %: 0.0044 0.040

 

Динамический диапазонДинамический диапазон, DirectSound 16-bit output и DirectSound 16-bit output + Dither

 

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

 

Интермодуляционные искаженияИнтермодуляционные искажения, DirectSound 16-bit output и DirectSound 16-bit output + Dither

 

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

 

Тест шестой. DirectSound 16-bit output vs DirectSound 24-bit output, -2dB.

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

 

Динамический диапазонДинамический диапазон, DirectSound 16-bit и 24-bit output

 

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

 

Интермодуляционные искаженияИнтермодуляционные искажения, DirectSound 16-bit output и DirectSound 16-bit и 24-bit output

 

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

Интермодуляционные искажения, DirectSound 16-bit output и DirectSound 16-bit и 24-bit output, увеличенный фрагмент

 

Выводы

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

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

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

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

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

Из результатов тестирования можно сделать вывод, что при наличии качественной звуковой карты с качественным же драйвером, воспроизведение музыкального материала через интерфейс 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.

Оцените материал: 
twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com blogger.com liveinternet.ru livejournal.ru memori.ru google.com yandex.ru
Комментариев: 15
  1. Спасибо, хорошая статья, с нетерпением жду тестов Фубаровского эмулятора ASIO...

  2. Dimmka, не думаю, что это реально нужно, в смысле тест foobar с плагином для вывода в ASIO. Но если ещё желающие будут, то возможно озадачусь.

  3. Второй день наблюдаю одно обсуждение на форуме Doctorhead.ru - http://www.doctorhead.ru/forum/viewtopic.php?t=2323 Там есть ссылка на эту статью. Какие забавные, однако, ответы дает clubnewmen...

    Кстати, родное для этой статьи обсуждение в формате форума здесь - http://forum.3dnews.ru/showthread.php?s=&threadid=94734&pagenumber=2#1632891

  4. На форуме сайта www.vegalab.ru пользователь Shim прокомментировал эту статью. Мой расширенный ответ здесь.

  5. а где же самое интересное - asio?

  6. Сначала хотел сделать. Потом подумал - а смысл? Посмотреть на такие же результаты, как с Kernel Streaming?

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

  7. Потому вы и сделали себе сами КАЛонки, потому что, видимо, не слышите разницу с хорошей аппаратурой (или просто жалко финансы). И звук foobar'а тоже, видимо, не отличаете от WMP. А про интерфейсы вывода поржал, статью писали зря, т.к. они влияют только на задержки, а не на качество звука :)

  8. Забавный ты, Alex. Меня лично не знаешь, поэтому АС, что я делаю (хобби такое) никогда не слышал, с какой ещё аппаратурой мне доводилось работать не в курсе. Что сказать то этим хотел, так, в комментах отметиться?

  9. Никита | 2011-08-14 в 01:20:06

    музыка при использовании kernel streaming на realtek hd звучит намного лучше даже на старых десятилетних колонках

  10. abonent007 (форум iXBT, отсюда http://forum.ixbt.com/topic.cgi?id=12:35314:19#19): "В статье где сравнивался Kernel Streaming и DirectSound, автор ошибочно пытался извлечь KS через ту же единственную в системе карту ESI Juli@, которая монопольно использовалась самой Виндоуз(ессесно без его ведома) под свои нужды для DirectSound. Неудивительно что у него (цитата) "при попытке воспроизведения через интерфейс Kernel Streaming и устройство Ch12 проигрыватель foobar выдавал ошибку" Т.е. в итоге он сравнивал директ саунд с директ саундом"

    Угу, а как насчёт объяснения эксперимента с изменением громкости в системном микшере, где KS (который по твоему всё равно был DS без моего ведома) таки проявил то самое свойство KS, ради которого его, собственно и включают - обошёл системный микшер? ;)

    Для чего статья затевалась - суть в том, что иногда люди ошибочно полагают, что включение вывода в плеере через KS улучшит звук по определению. На самом деле, грубо говоря и не вдаваясь в детали, сам смысл существования KS и его преимущество перед DS в уменьшении количества промежуточных звеньев, на которых что-то ещё может звук испортить. Потому-то простые любители послушать музыку реальный эффект чаще всего замечают на простых звуковухах, где производитель не заморачивался на вылизывании драйвера на предмет наименьшего вмешательства в сигнал, либо на мультимедийках, где наоборот, производитель специально наприкручивал улучшайзеров. На карте с ногами, растущими из профсегмента, такое менее вероятно, и тогда интерфейсы KS и DS (при вдумчивом подходе к делу) дают одинаковый результат, а у KS единственное преимущество - меломану не заморачиваться слежением за тем, что, как вариант, какой-нибудь родственник в его отсутствие настроечку какую не подкрутил, банально громкость в системном микшере, например.

  11. AleStorm (Алексей) | 2013-06-26 в 01:32:04

    Как ни крути, KS (и WASAPI под NT6) дают результат! Без них не проигрывается многоканальная музыка формата DTS WAV. Для неё нужно, чтоб битовый поток проходил из файла до декодера (внешнего, подключаемого, например по s\pdif) без искажений и это KS (и WASAPI) успешно реализуют, по крайней мере в Foobar2000. А с DS поток WAV не проходит без искажений :( , какой-то программный элемент изменяет его, даже когда громкость везде на максимум (т.е. ослабление 0дБ).

    В Нете присутствуют споры, какой плеер лучше звучит. Как бы они не выглядели абсурдно, но даже на мой взгляд такой плеер, как AIMP звучит лучше (более ярко), нежели Foobar2000. НО!!!! Через него не идёт поток DTS WAV. О чём это может свидетельствовать? А только о том, что в плеере скрытно стоит "улучшайзер". А в Foobar2000 его нет, поэтому Foobar2000 проигрывает звук строго как он записан в файле. Лично мне это больше нравится. Не люблю, что какой-то софт выполняет действия не нужные мне и без моего ведома.

  12. инженер | 2014-01-20 в 21:25:31

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

  13. Павел, а не могли бы вы протестировать интерфейсы вывода звука в windows 7 и 8?

  14. Айрат, если просто слушать, выводите через WASAPI и не парьтесь на эту тему. :)

    А у меня сейчас и карта другая, и интереса нет.

  15. Виталий | 2014-10-09 в 15:16:22

    Ну вобще DS для прослушивания совсем не катит - очень часто надо выводить музыку на одни каналы, а на других каналах в это же время висят звуки онлайн-игр и например Skype. Я чаще всего пользуюсь asio - там можно разбросать звук по каналам, наверно KS в этом случае ничуть не хуже но вот WASAPI и DS совсем не подходят. Может OpenAL самый подходящий? вроде он позволяет напрямую обращаться к карточке звуковой

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

Отправка комментария без регистрации. Комментарий публикуется после проверки.

Имя и сайт используются только при регистрации

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

(обязательно)