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 Dither
Громкость проигрывателя была поставлена на максимум, бегунок 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.
Kernel Streaming Proxy Plug-ins Design Guide
The kernel-streaming (KS) proxy module (Ksproxy.ax) is a DirectShow filter that brokers communication between KS objects in kernel-mode and user-mode applications. User-mode components can use KS proxy to communicate with any minidriver that is based on Ks.sys.
Specifically, an application can use the KS proxy module to control and retrieve information from KS objects that a KS minidriver implements. KS objects include, for example, KS filters, KS pins, and KS clocks.
You can extend KS proxy by writing a plug-in, which is a COM interface that provides methods to access property values. An advantage of the plug-in model is that it provides application writers with a mechanism that is more familiar than working directly with KS pin and KS filter property sets.
The following sections provide a high-level description of how to write an interface handler plug-in or a property page that uses KS proxy to communicate with a KS-based minidriver.
The interface plug-in provides programmatic control to get and set property values from within an application. Alternatively, if your goal is to enable users to manipulate properties through a user interface, a property page makes more sense. Both mechanisms require that you update the registry.
For more information about the KS proxy COM interfaces, exported helper functions, and structures that are used by applications and plug-ins, see Kernel Streaming Proxy.
Hi-Fi и High-End техника или энциклопедия звука и видео
ЗВУКОМАНИЯ
Hi-Fi и High-End техника или энциклопедия звука и видео
WASAPI, Kernel, Streaming
WASAPI, Kernel, Streaming
В этой статье поговорим о цифровой части звука, а именно:
WASAPI, Kernel, Streaming
WASAPI
WASAPI Windows Audio Session API — это особый метод вывода звука, поддерживающий побитовое воспроизведение и выключение всех прочих звуков в среде Windows 7
WASAPI Версия 2.0: Исправлены разные проблемы совместимости с Windows 7, а также проблемы совместимости с отдельными звуковыми картами.
Остается при условии соблюдения ограничений API Microsoft и, следовательно, потенциально «прерываемые» любым другим способом, что Microsoft можно было бы рассматривать WASAPI в качестве первоочередного в иерархии всех процессов. Кроме того, обмен не происходит непосредственно через обмен памяти, он проходит через API-интерфейсы для файла и затем прочитывает данные о звуковом потоке.
WASAPI
WASAPI в основном базируется на API Microsoft под названием WaveRT. Интерфейс WaveRT идет гораздо дальше в плане аудио, предлагающих устройство для чтения или записи звука без вмешательства программного драйвера. WASAPI — потребление системой CPU, таким образом, чрезвычайно уменьшается, поэтому задержки сведены к минимуму.
Kernel Streaming (Microsoft, 2010)
Kernel Streaming — это особая технология создания потоковых драйверов специально для звуковых устройств в Windows7. Данная технология находится в самой основе всех Diretsound, Waveout, Null output технологий — все остальные данных технологии в конце концов отдают звуковые данные этим драйверам.
foobar2000 Wasapi
Kernel Streaming — Этот режим имеет все, чтобы быть совершенным, так как срезанны все пути, чтобы обеспечить прямой доступ к буферу памяти между приложением и аудиоустройством.
Таким образом, файл с информацией непосредственно, минует всё идёт в Kernel Streaming. Задержка минимальна, сведено все к минимуму, поэтому здесь общий контроль над тактовой частотой передачи.
Тем не менее, есть риск найти плохой драйвер Kernel Streaming. В таком режиме, система зависает и не работает с таким драйвером.
Примечание: в зависимости от конструкции системной платы и ее компонентов, это может произойти по-разному, особенно с ноутбуками, некоторые устройства блокируют операционную систему в течение нескольких миллисекунд на IRQ, который может вызвать перерывы для высокококачественного воспроизведения.
Это особенно касается встроенных в материнскую плату Wi-Fi или Bluetooth устройств низкого и среднего качества. Везде, где возможно, если такая среда не используется, она должна быть отключена в панели управления компьютера (Wi-Fi, Ethernet, Bluetooth, Firewire или проводная сеть).
Продолжение следует…
Не бойтесь меня и добавляйтесь в ВК, Ютуб, Одноклассники
WASAPI, Kernel, Streaming
Если вы хотите узнать больше об этой теме, и быть в курсе, пожалуйста, подпишитесь на наш сайт.
Не забывайте сохранять нас в закладках! (CTRL+SHiFT+D) Подписывайтесь, комментируйте, делитесь в соц.сетях. Желаю удачи в поиске именно своего звука!
На нашем сайте Звукомания есть полезная информация по звуку и видео, которая пригодится для каждого, причем на каждый день, мы обновляем сайт «Звукомания» постоянно и стараемся искать и писать только отличную, проверенную и нужную информацию.
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.
Воспроизведение осуществлялось проигрывателем 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.