[Delphi] Volume Control

Pagina: 1
Acties:
  • 206 views sinds 30-01-2008
  • Reageer

  • Marv
  • Registratie: Oktober 2000
  • Laatst online: 11-06 06:52
Ik ben op zoek naar een manier om het master volume in windows aan te kunnen passen in een eigen programma. Nu heb ik wel wat gevonden maar dat wil niet werken :P

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, MMSystem, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TVolumeRec = record
    case Integer of
      0: (LongVolume: Longint);
      1: (LeftVolume, RightVolume : Word);
    end;

const DeviceIndex=5;
      {0:Wave
       1:MIDI
       2:CDAudio
       3:Line-In
       4:Microphone
       5:Master
       6:PC-loudspeaker}

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure SetVolume(aVolume:Byte);
var Vol: TVolumeRec;
begin
  Vol.LeftVolume := aVolume shl 8;
  Vol.RightVolume:= Vol.LeftVolume;
  auxSetVolume(UINT(DeviceIndex), Vol.LongVolume);
end;

function GetVolume:Cardinal;
var Vol: TVolumeRec;
begin
  AuxGetVolume(UINT(DeviceIndex),@Vol.LongVolume);
  Result:=(Vol.LeftVolume + Vol.RightVolume) shr 9;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(inttostr(GetVolume));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
SetVolume(0);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
showmessage(inttostr(auxGetNumDevs))
end;

end.


Deze code (zonder button 1 t/m 3) heb ik van delphi.about.com maar het wil niet werken.... uit de help heb ik nog "auxGetNumDevs" gehaald en daar krijg ik 0 als result.. geen devices dus?

Op een win98 bak met sb16 krijg ik 7 bij auxgetnumdevs terug (en werkt het instellen van het geluid). Op mijn pc (winxp met sblive) werkt het dus niet. Iemand een idee wat er mis kan zijn?
Het programma wat ik aan het maken ben is voor die win98 bak maar ik vind het toch raar dat dit niet werkt in Winxp met sblive.

"Everything I've ever done or said is the complete opposite of what I've wanted" -- George


Verwijderd

Probeer eens waveOutGetNumDevs ipv auxGetNumDevs. auxGetNumDevs is voor CD's enzo, dacht ik zo, wel typisch dat jij er geen hebt ;)

  • Marv
  • Registratie: Oktober 2000
  • Laatst online: 11-06 06:52
Verwijderd schreef op 30 september 2002 @ 18:50:
Probeer eens waveOutGetNumDevs ipv auxGetNumDevs. auxGetNumDevs is voor CD's enzo, dacht ik zo, wel typisch dat jij er geen hebt ;)
Tnx

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, mmsystem;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TVolumeRec = record
    case Integer of
      0: (LongVolume: Longint);
      1: (LeftVolume, RightVolume : Word);
    end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure SetVolume(aVolume:Byte);
var Vol: TVolumeRec;
begin
  Vol.LeftVolume := aVolume shl 8;
  Vol.RightVolume:= Vol.LeftVolume;
  waveOutSetVolume(UINT(0), Vol.LongVolume);
end;


function GetVolume:Cardinal;
var Vol: TVolumeRec;
begin
  waveOutGetVolume(UINT(0),@Vol.LongVolume);
  Result:=(Vol.LeftVolume + Vol.RightVolume) shr 9;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
label1.caption:=(inttostr(waveOutGetNumDevs)); //aantal devices
label2.caption:=(inttostr(GetVolume));         //lees volumelevel
SetVolume(strtoint(edit1.Text));               //vul hier een nieuw volume in 0-255
label3.caption:=(inttostr(GetVolume));         //lees nieuw volumelevel
end;

end.


Zo werkt ie dus onder XP (met sblive) en onder Win98 (met sb16) _/-\o_

"Everything I've ever done or said is the complete opposite of what I've wanted" -- George