Главная страница
    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.075 c
2-1127833868
dnk_arty
2005-09-27 19:11
2005.10.23
Олимпиада


1-1128334839
Shlomo
2005-10-03 14:20
2005.10.23
Rave Reports: Region Component – его рамки?


1-1127929275
NikNet
2005-09-28 21:41
2005.10.23
Как правельнно пользоватся aplibu, как архивировать TMemoryStream


2-1127749588
erika
2005-09-26 19:46
2005.10.23
fb


2-1128003182
hooky-mars
2005-09-29 18:13
2005.10.23
Непонятка с var в dll`ай





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский