Билл Гейтс очень любил музыку Джимми Моррисона и его команды. Ему до смерти хотелось придумать что-нибудь свое, такое же: серьезное и ответственное. Правда вот фантазии маловато у него было, не хватило децл...
Эта программа увеличивает громкость выбранного канала на 1000:
uses MMSystem;
procedure TForm1.Button1Click(Sender: TObject);
var
vol: longint;
LVol, RVol: integer;
begin
AuxGetVolume(ListBox1.ItemIndex, @Vol);
LVol := Vol shr 16;
if LVol < MaxWord - 1000 then
LVol := LVol + 1000
else
LVol := MaxWord;
RVol := (Vol shl 16) shr 16;
if RVol < MaxWord - 1000 then
RVol := RVol + 1000
else
RVol := MaxWord;
AuxSetVolume(ListBox1.ItemIndex, LVol shl 16 + RVol);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
cap: TAuxCaps;
beginfor i := 0 to auxGetNumDevs - 1 dobegin
auxGetDevCaps(i, Addr(cap), SizeOf(cap));
ListBox1.Items.Add(cap.szPname)
end;
end;
Программа на Delphi, которая увеличивает громкость выбранного устройства на 1000 единиц. Программа использует модуль MMSystem для взаимодействия с аудио устройствами.
Вот подробное описание того, что делает каждый раздел кода:
Процедура FormCreate:
Эта процедура вызывается при создании формы. Она пополняет список (ListBox1) именами всех доступных аудио устройств на системе.
auxGetNumDevs возвращает количество доступных аудио устройств.
Цикл iterates over each device, вызывая auxGetDevCaps, чтобы получить информацию о устройстве (например, его имя) и добавлять ее в список.
Процедура Button1Click:
Эта процедура вызывается при клике кнопки на форме. Она увеличивает громкость выбранного устройства на 1000 единиц.
AuxGetVolume получает текущее значение громкости для выбранного устройства.
Громкость разбивается на два 16-разрядных компонента (LVol и RVol) с помощью битовых операций (shr и shl).
Если громкость меньше максимального значения, минус 1000, она увеличивается на 1000. Иначе, она устанавливается в максимальное значение.
Обновленная громкость устанавливается с помощью AuxSetVolume.
Замечания:
MaxWord вероятно константа, определенная в другом месте кода, которая представляет собой максимальное значение для 16-разрядного целого числа (то есть 65535).
Программа предполагает, что выбранное устройство поддерживает оба канала (левый и правый). Если это не так, RVol компонент всегда будет игнорироваться.
Увеличение громкости может не быть линейным, поскольку зависит от конкретного аудио-оборудования и его возможностей.
Альтернативное решение:
Если вы хотите сделать код более robust или пользовательски friendly, вот несколько предложений:
Добавьте обработку ошибок для случаев, когда AuxGetVolume или AuxSetVolume не удается.
Реализуйте слайдер или другой UI-элемент, который позволяет пользователям изменять увеличение громкости, а не закодировать его в 1000 единиц.
Рассмотрите использование более современного и кросс-платформенного библиотеки для работы с аудио вместо MMSystem, которая является специфичной для Windows.
Данная статья рассказывает о программе на языке Delphi, которая позволяет изменять громкость выбранного канала на компьютере на 1000 единиц.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.