Когда я запускаю этот код:
MIXERLINE MixerLine;
memset( &MixerLine, 0, sizeof(MIXERLINE) );
MixerLine.cbStruct = sizeof(MIXERLINE);
MixerLine.dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT;
mmResult = mixerGetLineInfo( (HMIXEROBJ)m_dwMixerHandle, &MixerLine, MIXER_GETLINEINFOF_COMPONENTTYPE );
Под XP MixerLine.cChannels возвращается как число каналов, которые поддерживает звуковая карта. Часто 2, в наши дни часто намного больше.
Под Vista MixerLine.cChannels возвращается как единое целое.
Затем я получил элемент управления MIXERCONTROL_CONTROLTYPE_VOLUME и установил громкость для каждого канала, который поддерживается, и установил регулятор громкости на разные уровни на разных каналах, чтобы панорамировать музыку назад и вперед между динамиками (слева направо).
Очевидно, что в Vista этот подход не работает, поскольку существует только один канал. Я могу установить громкость, и это для обоих каналов одновременно.
Я пытался получить MIXERCONTROL_CONTROLTYPE_PAN для этого устройства, но это не был действительный элемент управления.
Итак, вопрос для всех вас, экспертов системы MMS, заключается в следующем: какой тип управления мне необходим для настройки баланса влево / вправо? С другой стороны, есть ли лучший способ? Мне бы хотелось решение, которое работает как с XP, так и с Vista.
Сведения о компьютере: 32-разрядная версия Vista Ultimta SP1 и все последние исправления. Звук обеспечивается картой Creative Audigy 2 ZS с 4 подключенными динамиками, которые могут быть правильно адресованы (управляться) через звуковую панель Vista. Последняя версия драйвера на сайте Creative (SBAX_PCDRV_LB_2_18_0001). Звук в Vista не установлен на моно, и все каналы видны и управляются с помощью звуковой панели.
Запуск программы в «режиме совместимости с XP» не меняет поведение этой проблемы.