unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    sb: TScrollBar;
    procedure sbChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


type
tvol = record
left,right : word;
end;

implementation

{$R *.DFM}




procedure TForm1.sbChange(Sender: TObject);
var
err : mmresult;
hmix : hmixer;
ml : tmixerline;
mlc : tmixerlineControls;
mc : mixercontrol;
cd : tmixercontroldetails;
cds : tmixercontroldetails_unsigned;
begin

//open mixer
err:=mixeropen(@hmix,MIXER_OBJECTF_MIXER,0,0,0);
if err<>MMSYSERR_NOERROR  then beep;

//get speaker line
ml.cbStruct:=sizeof(tmixerline);
ml.dwComponentType:=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
err:= mixerGetLineInfo(hmix,@ml,MIXER_GETLINEINFOF_COMPONENTTYPE);
if err<>MMSYSERR_NOERROR  then beep;


//get current volume
mlc.cbStruct:=sizeof(tmixerlinecontrols);
mlc.dwLineID:=ml.dwLineID;
mlc.dwControlType:=MIXERCONTROL_CONTROLTYPE_VOLUME;
mlc.cControls:=1;
mlc.pamxctrl:=@mc;
mlc.cbmxctrl:=sizeof(tmixercontrol);
err:=mixerGetLineControls(hmix,@mlc,MIXER_GETLINECONTROLSF_ONEBYTYPE);
if err<>MMSYSERR_NOERROR  then beep;



cd.cbstruct:=sizeof(tmixercontroldetails);
cd.dwControlID:=mc.dwControlID;
cd.cChannels:=1;
cd.hwndOwner:=0;
cd.cMultipleItems:=0;
cd.cbDetails:=sizeof(integer);
cd.paDetails:=@cds;
cds.dwValue:=sb.Position;


err:=mixerSetControlDetails(hmix,@cd,MIXER_GETCONTROLDETAILSF_VALUE);
if err<>MMSYSERR_NOERROR then beep;

mixerclose(hmix);

end;

end.