Поделиться через


Особенности клиентов DirectSound

В Microsoft Windows 2000 и Windows 98 DirectSound не поддерживает форматы, отличные от PCM, независимо от версии DirectSound. (Однако DirectSound 8 поддерживает форматы, отличные от PCM, в Windows 2000 с пакетом обновления 2 (SP2) и Windows 98 SE + исправление. Кроме того, версии DirectSound, поставляемые с Windows XP и более поздних версий, а также Windows Me, поддерживают форматы, отличные от PCM.)

Чтобы определить, поддерживает ли драйвер WDM определенный формат волн, клиент может попытаться создать буфер DSBCAPS_LOCHARDWARE в этом формате в драйвере и проверить успешность попытки. API DirectSound не предоставляет другого способа определить, какие форматы данных, отличные от PCM, поддерживаются.

DirectSound позволяет дополнительным буферам DSBCAPS_LOCHARDWARE иметь любой допустимый формат WAVEFORMATEX или WAVEFORMATEXTENSIBLE , поддерживаемый выбранным драйвером. При поиске формата в списке поддерживаемых форматов драйвера DirectSound проверяет только форматы, содержащие описатель KSDATAFORMAT_SPECIFIER_DSOUND.

Вы можете расширить приложение DirectSound для использования формата, отличного от PCM, сначала создав структуру WAVEFORMATEX или WAVEFORMATEXTENSIBLE, описывающую этот формат. Затем загрузите указатель на структуру в элемент lpwfxFormat структуры DSBUFFERDESC, который передается в метод CreateSoundBuffer . Для использования формата, отличного от PCM, не требуется вносить другие изменения в существующий код DirectSound. Обратите внимание, что элементы управления, которые драйвер обычно поддерживает для данных PCM, вряд ли будут поддерживаться для некоторых форматов, не относящихся к PCM. Например, карта, поддерживающий цифровой вывод данных, закодированных в формате AC-3 или WMA Pro, вряд ли будет поддерживать элементы управления DSBCAPS_CTRLPAN или DSBCAPS_CTRLVOLUME для этих данных. Таким образом, попытка создать буфер DirectSound с этими флагами может завершиться ошибкой.

Воспроизведение DirectSound с помощью драйверов VxD или устаревших драйверов waveOut по-прежнему ограничено PCM; Форматы, отличные от PCM, не поддерживаются.