Управление громкостью звука приложения в Delphi

Я даже не уверен, укладывается ли это в один вопрос, но это единственная проблема. У меня есть проигрыватель интернет-радио, написанный на Delphi XE, использующий библиотеку BASS для потоковой передачи и воспроизведения звука. Приложение должно работать под Windows XP, Vista и 7.

Bass позволяет легко контролировать глобальную громкость, но не имеет возможности отключить звук, и, как правило, лучше регулировать громкость для каждого приложения.

Bass также позволяет легко регулировать громкость «канала» (потока), но опять же, нет отключения звука, и это тоже не подходящее управление для каждого приложения. (На регулятор громкости приложения в микшере Windows это не повлияет.)

Я понимаю, что для Vista и выше мне нужны ISimpleAudioVolume и / или IAudioEndpointVolume, но я не могу найти их реализацию в Delphi. Итак, одна часть вопроса заключается в том, существует ли она как сторонняя библиотека?

Часть вторая: как правильно регулировать громкость и отключать звук (в масштабе всей системы или для отдельного приложения) в XP, где эти интерфейсы недоступны?


person Marek Jedliński    schedule 06.01.2011    source источник
comment
Вам не нужна реализация Delphi. Просто следуйте официальной документации на MSDN.   -  person Andreas Rejbrand    schedule 06.01.2011
comment
Эти интерфейсы не объявлены в Delphi Xe. А что с ХР?   -  person Marek Jedliński    schedule 06.01.2011
comment
1) Вы можете заявить их сами. 2) Это может быть проблемой.   -  person Andreas Rejbrand    schedule 06.01.2011
comment
Вы действительно хотите изменить громкость вашего приложения или просто громкость звука, который вы воспроизводите с определенной библиотекой?   -  person CodesInChaos    schedule 06.01.2011
comment
@CodeInChaos: Либо, но правильно реализованный регулятор громкости должен работать в тандеме с системой. Положение ползунка громкости в приложении должно отражаться в ползунке громкости для каждого приложения в микшере Windows. (7 имеет новый микшер, который отображает элемент управления для каждого приложения, когда приложение начинает использовать аудиоустройство). То же и для немого. В настоящее время я просто установил нулевую громкость в приложении, но это не совсем отключение звука, что касается Windows, значок динамика не указывает на отключение звука и т. Д.   -  person Marek Jedliński    schedule 06.01.2011
comment
Хм, а почему вопрос против? Это неточно сформулировано? Uniportant? Это, конечно, не дубликат - я искал, и, похоже, пока нет полезного ответа на stackoverflow, по крайней мере, для Pascal / Delphi. Решения C ++ бесполезны. (Модераторы: если вопрос какой-то неуместный, просто закройте его.)   -  person Marek Jedliński    schedule 06.01.2011
comment
XP имеет только один регулятор громкости; не совершайте ошибку, которую допускает программное обеспечение вроде VLC: они неправильно управляют основным регулятором громкости и рассинхронизируются. Предоставьте пользователю возможность управлять основной громкостью, а функции для каждого приложения выполняются только в Windows 7 и более поздних версиях.   -  person Jeroen Wiert Pluimers    schedule 06.01.2011
comment
@Jeroen Pluimers: Vista и выше. В остальном я не мог не согласиться.   -  person Paul-Jan    schedule 21.09.2011
comment
у вас есть мой голос, чтобы компенсировать ваши голоса против. ваш вопрос правильный и хороший.   -  person Z80    schedule 07.08.2018


Ответы (1)


Используйте этот простой код, чтобы отключить основной звук, который он работает на моей машине:

procedure TForm1.Button1Click(Sender: TObject);
var
i:Integer;
begin
for i:=0 to 100 do
begin
  keybd_event($AE, MapVirtualKey($AE,0), 0, 0);
  keybd_event($AE, MapVirtualKey($AE,0), KEYEVENTF_KEYUP, 0);
end;
end;
person opc0de    schedule 27.05.2011
comment
Почему бы не выключить звук вместо того, чтобы уменьшить громкость? Коды виртуальных ключей - › VK_VOLUME_MUTE = 0xAD - person Sertac Akyuz; 27.05.2011