KMixer, иначе говоря, драйвер Kernel Audio Mixer является частью WDM Audio с Windows 98 по Windows XP, который управляет смешиванием многих аудио буферов для вывода.

Задачи, выполняемые драйвером KMixer.sys:

  • Смешивание множества потоков PCM.
  • Конвертированием форматов, битности сэмплов и частоты дискретизации.
  • Конфигурацией динамиков и сопоставлением каналов.

В Windows 98, Windows 2000 и Windows Me максимальная частота дискретизации, обеспечиваемая драйвером, составляла 100 кГц. Начиная с Windows XP SP1, KMixer поддерживает частоту дискретизации вплоть до 200 кГц.

Особенности

KMixer был разработан чтобы спасти приложения, освободив их от необходимости выполнять смешивание аудио потоков, особенно это было актуально в случае слабых звуковых карт, которые не умели этого делать. Однако, это замечательное казалось бы начинание имело ряд недостатков.

Во-первых, задержки KMixer были порядка 30 мс и уменьшить их было невозможно, так как этот компонент находился прямо перед звуковой картой. Таким образом, это имело влияние на любой поток, включая воспроизведение через DirectSound (исключая случаи аппаратного смешивания) и WinMM. Если звуковая карта поддерживала аппаратное смешивание (также известное как аппаратная буферизация или аппаратное ускорение DirectSound), то DirectSound отправлял аудио потоки прямо на устройство. Только в таких случаях удавалось обойти KMixer.

В ранних релизах, таких как первый релиз Windows 98, драйвер KMixer пытался смешивать все форматы данных, проходившие через него, даже если он не поддерживался. Это вызывало различные проблемы с медиаплеерами, которые пытались передать сжатые AC3 потоки через S/PDIF выход звуковой карты на ресивер домашних кинотеатров. Это было исправлено в Windws Me. Для Windows 98 Second Edition и Windows 200 SP2 также был выпущен патч. Начиная с Windows Me, waveOut, DirectSound и DirectShow API начали поддерживать не-PCM форматы, такие как AC-3 или WMA для передачи через S/PDIF, что обеспечивало передачу данных классовому драйверу в обход KMixer.

Новое API, работающее в режиме ядра, Direct Kernel Streaming было также внедрено в Windows 98 для того, чтобы была возможность обойти KMixer и избежать некоторых проблем, связанных с ним.

Однако, также стоит отметить, вопреки распространенному мнению, KMixer не вносил изменений в звук в большинстве случаев. Также было множество путей обойти KMixer без необходимости специального плагина, который бы обеспечивал доступ к DirectSound, ASIO, Direct Kernel Streaming или WASAPI. В Windows XP, например, таким путем было использование DirectSound вместе с аппаратным микшером (по умолчанию этот метод используется в Winamp).

Замена KMixer

KMixer был убран с приходом Windows Vista. Он был заменен движком WASAPI (Windows Audio Session API), работающим в пользовательском режиме. WASAPI являлся частью переработанной аудио архитектуры этой ОС. Движок мог оперировать в двух режимах: Совместном или Эксклюзивном. В совместном режиме все ещё имело место быть смешивание. Аудио отправлялось на драйвер в одном формате (здесь под форматом подразумевается совокупность частоты дискретизации, битности сэмплов и количества каналов), который можно было настроить через панель управления звуком. В эксклюзивном режиме WASAPI позволял обойти микшер, как это делают другие аудио API, такие как OpenAL или ASIO.