KMixer
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.