Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Вниз

ПОМОГИТЕ! Как управлять громкостью?   Найти похожие ветки 

 
anamal ©   (2005-03-06 19:44) [0]

Пожалуйста, подскажите как управлять громкостью видео и аудео файла?
Ну, например, на TMediaPlayer что-то проигрывается и нужно изменить громкость?
Заранее благодарен!


 
Narik ©   (2005-03-07 00:16) [1]

unit Main;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 ComCtrls, MMSystem, Buttons, ExtCtrls, StdCtrls, ShellAPI;

type
 TMainForm = class(TForm)
   VolumeBar: TProgressBar;
   cmdMinVolume: TSpeedButton;
   cmdMaxVolume: TSpeedButton;
   procedure FormCreate(Sender: TObject);
   procedure VolumeBarMouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure FormDestroy(Sender: TObject);
   procedure cmdMinVolumeClick(Sender: TObject);
   procedure cmdMaxVolumeClick(Sender: TObject);
 private
   { Private declarations }
   procedure MixCtrlChange(var mess : TMessage); message MM_MIXM_CONTROL_CHANGE;
 public
   { Public declarations }
 end;

var
 MainForm: TMainForm;
 hmix:integer;
 mixcaps:TMixerCaps;
 volumeID,volmin,volmax:integer;
 details:TMixerControlDetails;
 mixctrl:TMixerControl;
 valdets:TMixerControlDetailsUnsigned;
 curvolume:dword;
 svEnable : boolean;

implementation

{$R *.DFM}

procedure TMainForm.MixCtrlChange(var mess : TMessage);
begin
 if not svEnable then Exit;
 if WindowState = wsMinimized Then Exit;
 Details.cbStruct := SizeOf(Details);
 Details.dwControlID := VolumeID;
 Details.cChannels := 1;
 Details.cMultipleItems := 0;
 Details.cbDetails := SizeOf(Valdets);
 Details.paDetails := @valdets;
 mixerGetControlDetails(hmix, @details, MIXER_GETCONTROLDETAILSF_VALUE);
 CurVolume := Valdets.dwValue;
 VolumeBar.Position := CurVolume;
end;

procedure TMainForm.FormCreate(Sender: TObject);
var
 i          : Integer;
 MixLine    : TMixerLine;
 MixLineCtrl: TMixerLineControls;
 MixCtrl    : TMixerControl;
begin
 inherited;
 MixerOpen(@hmix, 0, Handle, 0, MIXER_OBJECTF_MIXER or CALLBACK_WINDOW);
 MixerGetDevCaps(0, @mixcaps, SizeOf(MixCaps));
 For I := 0 to MixCaps.cDestinations - 1 do
  begin
    Mixline.dwDestination := I;
    Mixline.cbStruct := SizeOf(Mixline);
    MixerGetLineInfo(hmix, @mixline, MIXER_GETLINEINFOF_DESTINATION);
    If Mixline.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS then
        break;
  end;
 if Mixline.dwComponentType <> MIXERLINE_COMPONENTTYPE_DST_SPEAKERS then
  begin
    ShowMessage("Миксер не найден !");
    svEnable := False;
    Exit;
  end
 else
    svEnable := True;
    MixLineCtrl.cbStruct := SizeOf(MixLineCtrl);
    MixLineCtrl.dwControlType := MIXERCONTROL_CONTROLTYPE_VOLUME;
    MixLineCtrl.dwLineID := MixLine.dwLineID;
    MixLineCtrl.cControls := 2;
    MixLineCtrl.cbmxctrl := Sizeof(MixCtrl);
    MixCtrl.dwControlType := MIXERCONTROL_CONTROLTYPE_VOLUME;
    MixLineCtrl.pamxctrl := @MixCtrl;
    MixerGetLineControls(hmix, @mixlinectrl, MIXER_GETLINECONTROLSF_ONEBYTYPE);
    VolumeID := MixCtrl.dwControlID;
    VolMin := MixCtrl.Bounds.dwMinimum;
    VolMax := MixCtrl.Bounds.dwMaximum;
    Details.cbStruct := Sizeof(Details);
    Details.dwControlID := VolumeID;
    Details.cChannels := 1;
    Details.cMultipleItems := 0;
    Details.cbDetails := SizeOf(Valdets);
    Details.paDetails := @valdets;
    MixerGetControlDetails(hmix, @details, MIXER_GETCONTROLDETAILSF_VALUE);
    CurVolume := Valdets.dwValue;
    VolumeBar.Min := VolMin;
    VolumeBar.Max := VolMax;
    VolumeBar.Position := CurVolume;
end;

procedure TMainForm.VolumeBarMouseDown(Sender: TObject;
 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 if not svEnable Then exit;
 X := Round(X / VolumeBar.Width * (VolumeBar.Max - VolumeBar.Min) + VolumeBar.Min);
 VolumeBar.Position := X;
 Details.cbStruct := Sizeof(Details);
 Details.dwControlID := VolumeID;
 Details.cChannels := 1;
 Details.cMultipleItems := 0;
 Details.cbDetails := Sizeof(Valdets);
 Details.paDetails := @Valdets;
 if X >4000 then
   Valdets.dwValue := VolumeBar.Position
 else
   Valdets.dwValue := 0;
 MixerSetControlDetails(hmix, @details, MIXER_SETCONTROLDETAILSF_VALUE);
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
 if not svEnable then Exit;
 MixerClose(hmix);
 inherited;
end;

procedure TMainForm.cmdMinVolumeClick(Sender: TObject);
begin
 if not svEnable then Exit;
 VolumeBar.Position := VolumeBar.Position - (VolumeBar.Max - VolumeBar.Min) div 10;
 if VolumeBar.Position < VolumeBar.Min then
   VolumeBar.Position := VolumeBar.Min;
 Details.cbStruct := SizeOf(Details);
 Details.dwControlID := VolumeID;
 details.cChannels := 1;
 Details.cMultipleItems := 0;
 Details.cbDetails := SizeOf(Valdets);
 Details.paDetails := @Valdets;
 if VolumeBar.Position > 4000 then
   valdets.dwValue := VolumeBar.Position
 else
   valdets.dwValue := 0;
 MixerSetControlDetails(hmix, @details, MIXER_SETCONTROLDETAILSF_VALUE);
end;

procedure TMainForm.cmdMaxVolumeClick(Sender: TObject);
begin
 if not svEnable then Exit;
 VolumeBar.Position := VolumeBar.Position + (VolumeBar.Max - VolumeBar.Min) div 10;
 if VolumeBar.Position > VolumeBar.Max then
    VolumeBar.Position := VolumeBar.Max;
 Details.cbStruct := SizeOf(Details);
 Details.dwControlID := VolumeID;
 Details.cChannels := 1;
 Details.cMultipleItems := 0;
 Details.cbDetails := SizeOf(Valdets);
 Details.paDetails := @Valdets;
 if VolumeBar.Position > 4000 then
   Valdets.dwValue := VolumeBar.Position
 else
   Valdets.dwValue:=0;
 MixerSetControlDetails(hmix, @details, MIXER_SETCONTROLDETAILSF_VALUE);
end;

end.


 
vakir ©   (2005-03-09 15:13) [2]

бросай на форму TrackBar, на событие onChange пиши:
d1:=trackbar1.position;
d1:=d2; //Оба динамика меняют громкость одинаково
vol:=(a shl 16) or b;
waveOutSetVolume(h,vol);
где, d1,d2:word; vol: dword; h:hWnd;
TrackBar.Max:=65535;


 
Narik ©   (2005-03-16 19:33) [3]

vakir ©   (09.03.05 15:13) [2]

ну да он выдаёт ошибку:
 vol:=(a shl 16) or b;
что такое a???


 
Kair+ ©   (2005-03-17 21:28) [4]


> Narik ©   (16.03.05 19:33) [3]
> vakir ©   (09.03.05 15:13) [2]
>
> ну да он выдаёт ошибку:
>  vol:=(a shl 16) or b;
> что такое a???


это у него правый и левый каналы (баланс):
это типа функция function MakeLong(A, B: Word): LongInt.


 
kai ©   (2005-03-19 00:49) [5]

ну если уж через MCI TMediaPlayer, то можно и попроще:

mciSendstring(PAnsiChar("setaudio "" + MediaPlayer1.FileName +
 "" volume to " + IntToStr(Volume)), nil, 0, 0);

где Volume формируется по правилам [4]


 
andrey12   (2005-05-18 17:23) [6]

Ничего не работает ктонибудь напишите пожалуйста с описанием!!!!!!!!


 
andrey12   (2005-05-19 14:12) [7]

ну если уж через MCI TMediaPlayer, то можно и попроще:

mciSendstring(PAnsiChar("setaudio "" + MediaPlayer1.FileName +
"" volume to " + IntToStr(Volume)), nil, 0, 0);

---куда это лепить????????


 
r13   (2005-05-27 10:03) [8]

найди компонент TAudioMixer v1.4 и не парься


 
MrAndrey_ka   (2005-05-31 11:37) [9]

Попробуй так:

Изменение громкости звуков в Windows
uses MMSystem;

function GetWaveVolume: DWord;
var Woc : TWaveOutCaps;
   Volume : DWord;
begin
 result:=0;
 if WaveOutGetDevCaps(WAVE_MAPPER, @Woc, sizeof(Woc)) =
      MMSYSERR_NOERROR then begin
   if Woc.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then begin
     WaveOutGetVolume(WAVE_MAPPER, @Volume);
     Result := Volume;
   end;
 end;
end;

procedure SetWaveVolume(const AVolume: DWord);
var Woc : TWaveOutCaps;
begin
 if WaveOutGetDevCaps(WAVE_MAPPER, @Woc, sizeof(Woc)) =
      MMSYSERR_NOERROR then begin
   if Woc.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then
     WaveOutSetVolume(WAVE_MAPPER, AVolume);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Beep;
end;

procedure TForm1.Button2Click(Sender: TObject);
var LeftVolume: Word;
   RightVolume: Word;
begin
 LeftVolume := StrToInt(Edit1.Text);
 RightVolume := StrToInt(Edit2.Text);
 SetWaveVolume(MakeLong(LeftVolume, RightVolume));
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 Caption := IntToStr(GetWaveVolume);
end;


 
Alexander Panov ©   (2005-05-31 12:21) [10]

Вообще, помогут и без панических криков в топике...



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.046 c
2-1127974020
~viper~
2005-09-29 10:07
2005.10.23
Подсчитать колличество людей


1-1128148095
heady
2005-10-01 10:28
2005.10.23
Скачать HTML-код странички в Memo


4-1124470748
NikNet
2005-08-19 20:59
2005.10.23
Как сделать Explorer для Реестра


1-1128152033
Иванов__
2005-10-01 11:33
2005.10.23
Как в DHTML вставить текст


2-1124833887
ronyn
2005-08-24 01:51
2005.10.23
Как создать программку ТРЕЙ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский