Почему я не могу установить общую громкость для аудиоинтерфейса USB / Firewire с помощью IAudioEndpointVolume :: SetMasterVolumeLevelScalar

Я пытаюсь исправить ошибку Audacity, которая связана с portmixer. Уровень вывода / ввода настраивается с помощью версии Portmixer для Mac, но не всегда в Windows. Я отлаживаю код окна portmixer, чтобы попытаться заставить его работать там.

Использование IAudioEndpointVolume :: SetMasterVolumeLevelScalar для установки основной громкости отлично работает для встроенного звука, но при использовании профессиональных внешних интерфейсов USB или Firewire, таких как RME Fireface 400, выходная громкость не изменится, хотя это отражается на панели управления звуком Windows для этого устройства, а также в системном микшере.

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

Функция IAudioEndpointVolume :: QueryHardwareSupport возвращает ENDPOINT_HARDWARE_SUPPORT_VOLUME, поэтому она должна иметь возможность это сделать.

Такое поведение существует для как ввод, так и вывод на многих устройствах.

Возможно, это ошибка Windows?

Это можно обойти, эмулируя (масштабируя) вывод, но это не рекомендуется, поскольку он не является функционально идентичным - лучше позволить аудиоинтерфейс выполняет масштабирование (особенно для входа, если он включает предусилитель).

6
задан Daniel Trebbien 21 September 2011 в 12:40
поделиться