可以先编写一个控制音量的类,然后在窗体中Uses这个类,加入两个TrackBar【分别为左右声道,Min:=0;Max=255】与两个CheckBox【用于设置是否静音和两声道音量同步】,然后编写代码就可以了。
// --[Yoyoworks]---------------------------------------------------------------- // 工程名称:prjPowerFlashPlayer // 软件名称:iPowerFlashPlayer // 单元作者:许子健 // 开始日期:2004年03月14日,14:31:16 // 单元功能:用于音量调整的类。 // -----------------------------------------------------------[SHANGHAi|CHiNA]-- Unit untTVolume; Interface Uses MMSystem, SysUtils; Type TVolume = Class(TObject) Private FVolume: LongInt; //存储音量。 FIsMute: Boolean; //存储静音值。 Procedure SetLeftVolume(Volume: Integer); //设置左声道的音量。 Function GetLeftVolume: Integer; //获得左声道的音量。 Procedure SetRightVolume(Volume: Integer); //设置右声道的音量。 Function GetRightVolume: Integer; //获得右声道的音量。 Procedure SetIsMute(IsMute: Boolean); //设置是否静音。 Public Constructor Create; Destructor Destroy; Override; Published Property LeftVolume: Integer Read GetLeftVolume Write SetLeftVolume; Property RightVolume: Integer Read GetRightVolume Write SetRightVolume; Property Mute: Boolean Read FIsMute Write SetIsMute; End; Implementation // ----------------------------------------------------------------------------- // 过程名: TVolume.Create // 参数: 无 // 返回值: 无 // ----------------------------------------------------------------------------- Constructor TVolume.Create; Begin Inherited Create; FVolume := 0; FIsMute := False; //初始化变量 waveOutGetVolume(0, @FVolume); //得到现在音量 End; // ----------------------------------------------------------------------------- // 过程名: TVolume.Destroy // 参数: 无 // 返回值: 无 // ----------------------------------------------------------------------------- Destructor TVolume.Destroy; Begin Inherited Destroy; End; // ----------------------------------------------------------------------------- // 过程名: TVolume.SetLeftVolume // 参数: Volume: Integer // 返回值: 无 // ----------------------------------------------------------------------------- Procedure TVolume.SetLeftVolume(Volume: Integer); Begin If (Volume < 0) Or (Volume > 255) Then Raise Exception.Create('Range error of the left channel [0 to 255].'); //如果“Volume”参数不在0至255的范围里,则抛出异常。 If FIsMute = False Then Begin waveOutGetVolume(0, @FVolume); //@示指向变量Volume的指针(32位),调用此函数的用意就是得到右声道的值,做到在调节左声道的时候,不改变右声道。 FVolume := FVolume And