Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Контроль звука

Delphi , Мультимедиа , Аудио

Контроль звука

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

uses
   MMSystem;

 function GetWaveVolume(var LVol: DWORD; var RVol: DWORD): Boolean;
 var
   WaveOutCaps: TWAVEOUTCAPS;
   Volume: DWORD;
 begin
   Result := False;
   if WaveOutGetDevCaps(WAVE_MAPPER, @WaveOutCaps, SizeOf(WaveOutCaps)) = MMSYSERR_NOERROR then
     if WaveOutCaps.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then
     begin
       Result := WaveOutGetVolume(WAVE_MAPPER, @Volume) = MMSYSERR_NOERROR;
       LVol   := LoWord(Volume);
       RVol   := HiWord(Volume);
     end;
 end;


 { 
  The waveOutGetDevCaps function retrieves the capabilities of 
  a given waveform-audio output device. 

  The waveOutGetVolume function retrieves the current volume level 
  of the specified waveform-audio output device. 
}


 function SetWaveVolume(const AVolume: DWORD): Boolean;
 var
   WaveOutCaps: TWAVEOUTCAPS;
 begin
   Result := False;
   if WaveOutGetDevCaps(WAVE_MAPPER, @WaveOutCaps, SizeOf(WaveOutCaps)) = MMSYSERR_NOERROR then
     if WaveOutCaps.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then
       Result := WaveOutSetVolume(WAVE_MAPPER, AVolume) = MMSYSERR_NOERROR;
 end;

 { 
  AVolume: 
  The low-order word contains the left-channel volume setting, 
  and the high-order word contains the right-channel setting. 
  A value of 65535 represents full volume, and a value of 0000 is silence. 
  If a device does not support both left and right volume control, 
  the low-order word of dwVolume specifies the volume level, 
  and the high-order word is ignored. 
}


 { *** How to Use: ***}

 // SetWaveVolume: 

procedure TForm1.Button1Click(Sender: TObject);
 var
   LVol: Word;
   RVol: Word;
 begin
   LVol := SpinEdit1.Value;  // max. is 65535 
  RVol := SpinEdit2.Value;  // max. is 65535 
  SetWaveVolume(MakeLong(LVol, RVol));
 end;


 // GetWaveVolume: 

procedure TForm1.Button2Click(Sender: TObject);
 var
   LVol: DWORD;
   RVol: DWORD;
 begin
   if GetWaveVolume(LVol, RVol) then
   begin
     SpinEdit1.Value := LVol;
     SpinEdit2.Value := RVol;
   end;
 end;

Программа на Delphi, которая управляет уровнем громкости волнового аудиовыходного устройства с помощью библиотеки MMSystem. Программа предоставляет две функции: GetWaveVolume и SetWaveVolume.

Функция GetWaveVolume получает текущий уровень громкости указанного волнового аудиовыходного устройства и хранит его в переменных LVol и RVol. Она возвращает булевое значение, указывающее, была ли операция успешной.

Функция SetWaveVolume устанавливает уровень громкости указанного волнового аудиовыходного устройства в значение, заданное параметром AVolume. Параметр AVolume - это DWORD-значение, содержащее настройку уровня громкости левого канала в низкой части слова и настройку уровня громкости правого канала в высокой части слова.

Программа также включает в себя два процедура: Button1Click и Button2Click. Эти процедуры вызываются при клике соответствующих кнопок на форме.

Процедура Button1Click устанавливает уровень громкости волнового аудиовыходного устройства с помощью функции SetWaveVolume. Значения для левого канала и правого канала громкости получаются из двух спин-редакторов (SpinEdit1 и SpinEdit2).

Процедура Button2Click получает текущий уровень громкости волнового аудиовыходного устройства с помощью функции GetWaveVolume и отображает его в тех же двух спин-редакторах.

Рекомендуется улучшение:

function SetWaveVolume(const AVolume: DWORD): Boolean;
var
  WaveOutCaps: TWAVEOUTCAPS;
begin
  Result := False;
  if WaveOutGetDevCaps(WAVE_MAPPER, @WaveOutCaps, SizeOf(WaveOutCaps)) = MMSYSERR_NOERROR then
    if (WaveOutCaps.dwSupport and WAVECAPS_VOLUME) = WAVECAPS_VOLUME then
      Result := WaveOutSetVolume(WAVE_MAPPER, AVolume) = MMSYSERR_NOERROR;
end;

// ...

function GetWaveVolume(var LVol: DWORD; var RVol: DWORD): Boolean;
var
  WaveOutCaps: TWAVEOUTCAPS;
  Volume: DWORD;
begin
  Result := False;
  if WaveOutGetDevCaps(WAVE_MAPPER, @WaveOutCaps, SizeOf(WaveOutCaps)) = MMSYSERR_NOERROR then
    if (WaveOutCaps.dwSupport and WAVECAPS_VOLUME) = WAVECAPS_VOLUME then
      begin
        Result := WaveOutGetVolume(WAVE_MAPPER, @Volume) = MMSYSERR_NOERROR;
        LVol := LoWord(Volume);
        RVol := HiWord(Volume);
      end;
end;

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

Также worth noting, что константа WAVE_MAPPER не определена в библиотеке MMSystem, аrather в Windows API. Она может быть определена следующим образом:

const
  WAVE_MAPPER = -1;

Эта константа представляет собой дефолтное волновое аудиовыходное устройство.

В статье описывается функциональность контроля звука в приложении Delphi, который позволяет изменять и получать текущие значения громкости левого и правого каналов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Аудио ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:44:16/0.0057449340820312/1