音量与静音控制

oxboy 2004-04-02 10:16:13
如何 1、更改系统 Playing 主声音音量(注意:是要求主声音,也就是说,更改的是系统右下角的喇叭的音量,而不是单单更改 WAVE 或 CD 或 MIDI 等的音量。),及2、如何将系统音量设为静音,要求设后右下角的喇叭为禁止,3、及如何知道系统目前为静音状态?
...全文
75 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
aiirii 2004-04-02
  • 打赏
  • 举报
回复
http://hubdog.csdn.net/Recommend/rcAudioMixer.htm

我以前也做過, 比較上面的簡單好多, 實現你要的兩個功能!
在我的程序拉, 能同時見到變化, 但現在在外地, 沒法拷代碼給你!
oxboy 2004-04-02
  • 打赏
  • 举报
回复
首先非常感谢两位回答,但:1、以上程序只是更改了波形声道的音量,并不是主音量,且更改后为什么“音量控制”窗口的不能跟着变。2、静音功能还是未解决。我要实现的是主音量。
南京自由人 2004-04-02
  • 打赏
  • 举报
回复
unit Unit1;

interface

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

type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
TrackBar1: TTrackBar;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.BitBtn1Click(Sender: TObject);
var
ls:integer;
begin
ls:=Self.TrackBar1.Position*255;
WaveOutSetVolume(ls,0);
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var
ls:integer;
begin
ls:=Self.TrackBar1.Position*255;
WaveOutSetVolume(ls,65535);
end;

end.
xzhifei 2004-04-02
  • 打赏
  • 举报
回复
unit WAV_Volume;

interface

uses
Windows, Messages, SysUtils, Variants, Classes;

function GetWaveVolumeLeft: Word;
function GetWaveVolumeRight: Word;
procedure GetWaveVolume(var Left, Right: WORD);
procedure SetWaveVolume(const Left, Right: WORD);
function SupportsLAndRVolume: boolean;

implementation
uses mmsystem;

{$R-}

function _GetWaveVolume: DWORD;
var
Woc : TWAVEOUTCAPS;
Volume : DWORD;
hwo : UINT;
begin
result := 0;

hwo := WAVE_MAPPER;
if WaveOutGetDevCaps(WAVE_MAPPER, @Woc, sizeof(Woc)) = MMSYSERR_NOERROR then
if (Woc.dwSupport and WAVECAPS_VOLUME) = WAVECAPS_VOLUME then
begin
if WaveOutGetVolume(hwo, @Volume) = MMSYSERR_NOERROR then
Result := Volume;
end;
end;

procedure _SetWaveVolume(const AVolume: DWORD);
var
Woc : TWAVEOUTCAPS;
hwo : UINT;
begin
hwo := WAVE_MAPPER;

if WaveOutGetDevCaps(WAVE_MAPPER, @Woc, sizeof(Woc)) = MMSYSERR_NOERROR then
if (Woc.dwSupport and WAVECAPS_VOLUME) = WAVECAPS_VOLUME then
WaveOutSetVolume(hwo, AVolume);
end;

function GetWaveVolumeLeft: Word;
var
d : DWORD;
begin
d := _GetWaveVolume;
result := LOWORD(d);
end;

function GetWaveVolumeRight: Word;
var
d : DWORD;
begin
d := _GetWaveVolume;
result := HIWORD(d);
end;

procedure GetWaveVolume(var Left, Right: WORD);
var
d : DWORD;
begin
d := _GetWaveVolume;
Left := LOWORD(d);
Right := HIWORD(d);
end;


procedure SetWaveVolume(const Left, Right: WORD);
var
d : DWORD;
begin
d := MAKELONG(Left, Right);
_SetWaveVolume( d );
end;

function SupportsLAndRVolume: boolean;
var
Woc : TWAVEOUTCAPS;
Volume : DWORD;
hwo : UINT;
begin
result := false;

hwo := WAVE_MAPPER;
if WaveOutGetDevCaps(WAVE_MAPPER, @Woc, sizeof(Woc)) = MMSYSERR_NOERROR then
result := (Woc.dwSupport and WAVECAPS_LRVOLUME) = WAVECAPS_LRVOLUME;
end;

end.

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧