Изменение громкости исключительно для текущего приложения

Начиная с Windows Vista, функция waveOutSetVolume (winmm.dll) больше не работает с основным томом ОС, а работает с каждым приложением индивидуально. По умолчанию установлено значение 100%, что означает, что приложение воспроизводит звук с той же громкостью, что и ОС.

Теперь я хочу использовать именно этот эффект: изменение громкости только для моего текущего приложения без изменения громкости ОС.

Я попробовал приложение, представленное на http://www.geekpedia.com/tutorial176_Get-and-set-the-wave-sound-volume.html. Я добавил элемент управления WindowsMediaPlayer и загрузил в него поток Webradio, используя свойство URL (для автозапуска установлено значение true). На первый взгляд, код выглядит не так, как должен: когда я прокручиваю ползунок, радио продолжает играть с той же громкостью, даже если я установил значение 0, что равносильно отключению звука. Я отладил и решил, что все в порядке, waveOutSetVolume возвращает 0. Это должно быть нормально, или я ошибаюсь?

Я открыл консоль микшера, предоставляемую Windows 7. Там я увидел следующее: ползунок соответствующего приложения в представлении микшера изменяется (как и должно), когда я прокручиваю ползунок в образце. Но громкость не меняется. Но если я уменьшу громкость приложения в консоли микшера (вручную с помощью мыши), веб-радио будет играть более низким голосом (как и должно). Похоже, что в моем коде отсутствует какой-то вызов «Отправить», чтобы заставить ОС соответствующим образом отрегулировать громкость приложения.

Любые идеи? Спасибо Дэвид


person David    schedule 22.12.2010    source источник


Ответы (1)


Вы можете использовать API-интерфейсы аудио-сеанса IAudioVolume и IAudioSessionNotification, чтобы изменить текущую громкость приложений и отслеживать ее с помощью ползунка громкости в приложении.

person ReinstateMonica Larry Osterman    schedule 25.12.2010