Avatar billede snorga Nybegynder
04. januar 2000 - 22:49 Der er 26 kommentarer og
1 løsning

Ændre "master volumen"

Kan man ændre windows' master volume ("play control") (op/ned/mute).

På samme måde som kan i via windows' volume control, bare fra et delphi program i stedet?
Avatar billede retep Nybegynder
04. januar 2000 - 23:48 #1
Jup :-)

Her har du koden...

unit Unit1;

interface

uses
  //Bemærk MMSystem
  Windows, Messages,MMSystem, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    ScrollBar1: TScrollBar;
    procedure ScrollBar1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
  //Scrollbaren's minimum værdi er sat til 0 Maksimum sat til 65535!
  //Scrollbaren styrer volumen...
  waveOutSetVolume(0,Scrollbar1.Position);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  waveOutSetVolume(0, 0); //Sætter lyden lig 0;
end;

end.

Mvh
Retep
Avatar billede snorga Nybegynder
05. januar 2000 - 14:19 #2
Det ændre ikke "master volumen", kun "wave/directSound".

Avatar billede delphi Nybegynder
05. januar 2000 - 15:01 #3
Check help filen til Windows MM API'et.  Der er et afsnit med Mixere mv.  Mon ikke det er den vej du skal gå?

42 point?  Underligt tal ;)

NiP
Avatar billede snorga Nybegynder
05. januar 2000 - 23:59 #4
>>Delphi:
Jo det tror jeg også, jeg har faktisk prøvet at få det med mixeren til at virke kan bare ikke finde ud af hvordan den skal bruge/få den til at virke :(

42 point hvis du kan fortælle mig hvordan den bruges :)
Avatar billede delphi Nybegynder
06. januar 2000 - 08:01 #5
Jeg har lige prøvet at kigge lidt på sagen (via help files).  Jeg kan ikke lige umiddelbart finde hvorledes man styrer Master Volume (tilgengæld er der masser af henvisninger til Wave og AUX (Line Out) volume ændringer).

Mon ikke der er en komponent på DSP eller lign.?

NiP
Avatar billede snorga Nybegynder
06. januar 2000 - 13:53 #6
Det er ikke helt det jeg har brug for :(

Jo, det er da muligt.. Kikker lige :)
Avatar billede sjensen Nybegynder
06. januar 2000 - 14:37 #7
Som Delphi nævnte tidligerer er det afsnittet om mixere du skal kigge på:

MIXERCONTROL Win API'en og strukturen MIXERCONTROLDETAILS_UNSIGNED giver dig kontrol over de "fadere", herunder Voloume, der findes i mixeren.

Dette gælder derfor også mastervoloumen.

sjensen
Avatar billede snorga Nybegynder
06. januar 2000 - 22:00 #8
>>sjensen, kan du få det til at virker? Jeg kan ikke :(
Avatar billede delphi Nybegynder
07. januar 2000 - 15:07 #9
Er der iøvrigt ikke en eller anden DirectX (DirectSound) rutine der kan anvendes.  Det kunne nemt tænkes at det var nemmere at gå igennem DirecX API'et end at benytte Mixers.  Mixers ser ud til at behøve en stabil blanding af functionskald og underlige record strukture.

NiP
Avatar billede snorga Nybegynder
08. januar 2000 - 01:04 #10
Måske.. Jeg kan da prøve om jeg kan finde noget om det..
Avatar billede delphi Nybegynder
10. januar 2000 - 08:28 #11
Jeg sad lige i weekenden og kiggede lidt på det - dvs. jeg lavede et test program (med Mixers).  Jeg har ikke nogen problemer med at få de forskellige Mixer kald (dvs. MixerOpen, MixerGetControlDetails, MixerGetLineInfo mv.) til at virke - der er bare et problem:  Hvor fa... er den værdi man skal læse/skrive til for at få/ændere den aktuelle volumen indstilling?

Dokumentationen mangler i mine øjne noget vedr. mixers....

NiP
Avatar billede snorga Nybegynder
11. januar 2000 - 08:46 #12
Hmmm.. Jeg har ikke kunne finde noget om at man via DirectX kunne styre "master volumen" :(

>>delphi, Gider du sende mig dit test program.. Jeg vil gerne se hvor ledes det skal gøres for at få det til at virke.
Avatar billede delphi Nybegynder
11. januar 2000 - 09:55 #13
Jeg har det vist liggende derhjemme.  Jeg kigger lige på sagen igen.  Men som sagt: Jeg har ikke fundet den værdi, der ændrer på Master Volumen.

NiP
Avatar billede snorga Nybegynder
16. januar 2000 - 20:11 #14
Jeg fandt nogle constant'er man bruger i forbindelse med getlineinfo (tror jeg nok, eller en af de andre funktioner) som hed noget med volume... så det er der nok :)

min email er forøvrigt snorga@mail.dk, hvis du gider sende dit test program.
Avatar billede delphi Nybegynder
18. januar 2000 - 10:45 #15
Så snart jeg lige får tid til at finde ud af om det stadig eksisterer - jeg har p**** travlt lige nu...

NiP
Avatar billede cybermike Nybegynder
20. januar 2000 - 21:20 #16
Delphi Super Page>søg MIXER.ZIP>download>installer i delphi>open eksempel

Vupsi, it´s working!
Avatar billede snorga Nybegynder
21. januar 2000 - 17:18 #17
>>cybermike, den virker vist kun med delphi 2?
Avatar billede cybermike Nybegynder
24. januar 2000 - 19:22 #18
Jeg bruger den i Delphi3.
Avatar billede snorga Nybegynder
28. januar 2001 - 03:24 #19
hmm.. noget nyt under solen..?
Avatar billede cybermike Nybegynder
28. januar 2001 - 12:01 #20
ja du skylder mig 42 points!
Avatar billede snorga Nybegynder
28. januar 2001 - 12:18 #21
Fik den aldrig til at virke..!

Kan ikke finde den på dsp, deres søgeting virker ikke.. Hvis du gider email mig mixer.zip, og den virker så skal du nok få \"dine\" point..

Og hvis det er master volumen den kan ændre på!
Avatar billede cybermike Nybegynder
28. januar 2001 - 12:21 #22
Det er vel ikke mit problem at du ikke kan finde ud af at dl´e den

anyway send mig en mail så skaljeg se hvad jeg kan gøre.

  CyberMike
Avatar billede snorga Nybegynder
28. januar 2001 - 12:25 #23
Det var hvis du havde den.

Min email står lidt længere oppe i denne email; men her er den igen snorga@mail.dk.

Jeg kunne slet ikke få den installeret i delphi, sidste jeg prøvede!
Avatar billede aasuper Nybegynder
28. april 2002 - 17:11 #24
Er du stadig interesseret i kode til ændring af master-volume? - For jeg har selv haft samme problem, men har nu selv fundet ud af det.

>>AASuper
Avatar billede snorga Nybegynder
08. juli 2002 - 11:16 #25
Ja tak, så kan jeg da få lukket spørgsmålet!
Avatar billede aasuper Nybegynder
12. juli 2002 - 17:18 #26
Her er den:


procedure TformMain.Lydstyrke(Enhed: Cardinal; V,H: Integer);
var
  MasterVol: TMixerControl;
  Details: TMixerControlDetails;
  Line: TMixerLine;
  Controls: TMixerLineControls;
begin

ZeroMemory(@Line, SizeOf(Line));
Line.cbStruct := SizeOf(Line);
Line.dwComponentType := Enhed;

mixerGetLineInfo(0, @Line, MIXER_GETLINEINFOF_COMPONENTTYPE);
ZeroMemory(@Controls, SizeOf(Controls));
Controls.cbStruct := SizeOf(Controls);
Controls.dwLineID := Line.dwLineID;
Controls.cControls := 1;
Controls.dwControlType := MIXERCONTROL_CONTROLTYPE_VOLUME;
Controls.cbmxctrl := SizeOf(MasterVol);
Controls.pamxctrl := @MasterVol;
mixerGetLineControls(0, @Controls, MIXER_GETLINECONTROLSF_ONEBYTYPE);
//Her angives venstre og højre volumen mellem 0 og 65535
detail[0]:=V;
detail[1]:=H;
MasterVol.dwControlType:= MIXERCONTROL_CONTROLTYPE_VOLUME;

with Details do
begin
cbStruct := SizeOf(Details);
dwControlID := MasterVol.dwControlID;
cChannels := 2;
cMultipleItems := 0;
cbDetails := SizeOf(integer);
paDetails := @detail;
end;

mixerSetControlDetails(0, @Details, MIXER_SETCONTROLDETAILSF_VALUE);

end;


Sådan ændres lydstyrken:

Lydstyrke(MIXERLINE_COMPONENTTYPE_SRC_LINE, 65530, 65530);

Mixeren kan udskiftes med andre typer. Master-volumen hedder således:
MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
Wave-volumen hedder således:
MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT

Hvis du vil bruge mute, kan du bare sætte højre og venstre til 0.
Der skal nok tilføjes et par ekstra ting i 'USES'. I hvert fald MMSystem og ExtCtrls.


>>AASuper
Avatar billede snorga Nybegynder
12. juli 2002 - 17:44 #27
Tak,
men mute ved at sætte volumen til 0 er vist ikke så smart, for hvordan "un-mute" man så igen?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester