2010-12-06 4 views
6

Я пытаюсь исправить ошибку Audacity, которая вращается вокруг portmixer. Уровень выходного/входного сигнала настраивается с использованием версии mac portmixer, но не всегда в окнах. Я отлаживаю код окна portmixer, чтобы попытаться заставить его работать там.Почему я не могу установить основную громкость для интерфейса USB/Firewire Audio с помощью IAudioEndpointVolume :: SetMasterVolumeLevelScalar

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

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

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

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

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

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

+0

Возможно, устройство не реализует стандартные методы Windows. Вы можете попробовать отладить приложение поставщика и посмотреть, что он делает. Вероятно, он отправляет некоторые пользовательские команды или что-то в этом роде. – Luke 2010-12-08 16:47:55

ответ

0

Карты, о которых вы говорите, как RME-те, просто не поддерживают настройку мастера или любого другого уровня с помощью программного обеспечения, и вы не можете с этим справиться. Это не ошибка Windows. Можно утверждать, что отказ от ENDPOINT_HARDWARE_SUPPORT_VOLUME является, однако, ошибкой, но это, вероятно, происходит от уровня драйвера, а не от самой Windows.

Единственным решением, которое я нашел до сих пор, является подключение отладчика (или добавление привязки dll) к поставляемому поставщику программному обеспечению и просмотр звонков DeviceIOControl, которые он делает (это те, которые используются для связи с оборудованием), при этом установка том в программном обеспечении поставщика. Довольно сложно сделать это для каждой отдельной карты, но, вероятно, стоит сделать пару про-карт. Особенно для Audacity, для программного обеспечения с открытым исходным кодом, это на самом деле не так уж плохо, поэтому я могу представить, что некоторые люди действительно счастливы, если бы объем на их карточке мог быть установлен им. (в то время, когда мы использовали исключительно RME Multiface, я потратил довольно много времени на выяснение вызовов DeviceIOControl, но в конце концов это определенно стоило того, поскольку я мог установить громкость в дБ для любой точки в матрице)