捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
盒子资源分类
全部展开 - 全部合拢
一个用来控制系统音量的类
关键字:Volume 音频 音量 控制 静音 声道 多媒体
来 自:原创
平 台:Win9x,Win2k/NT,WinXP 下载所需:0 火柴
深浅度:初级 完成时间:2004/3/14
发布者:superyoyonc 发布时间:2004/6/7
编辑器:DELPHI7 语  种:简体中文
分 类:媒体与图形 下载浏览:956/11202
加入到我的收藏
下载错误报错
登陆以后才能下载
 用户名:
 密 码:
自动登陆(30天有效)
无图片
一个用来控制系统音量的类,包括了调节左右声道、静音等功能,已被收入CNpack。

// --[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 $FFFF0000 Or (Volume Shl 8); //数字前加$表示是十六进制
      waveOutSetVolume(0, FVolume);
    End
      //如果不是静音状态,则改变音量;
  Else
    FVolume := FVolume And $FFFF0000 Or (Volume Shl 8);
  //否则,只改变变量。

End;

// -----------------------------------------------------------------------------
// 过程名:   TVolume.SetRightVolume
// 参数:     Volume: Integer
// 返回值:   无
// -----------------------------------------------------------------------------
Procedure TVolume.SetRightVolume(Volume: Integer);
Begin
  If (Volume < 0) Or (Volume > 255) Then
    Raise Exception.Create('Range error of the right channel [0 to 255].');

  If FIsMute = False Then
    Begin
      waveOutGetVolume(0, @FVolume);
      FVolume := FVolume And $0000FFFF Or (Volume Shl 24);
      waveOutSetVolume(0, FVolume);
    End
  Else
    FVolume := FVolume And $0000FFFF Or (Volume Shl 24);
End;

// -----------------------------------------------------------------------------
// 过程名:   TVolume.SetIsMute
// 参数:     IsMute: Boolean
// 返回值:   无
// -----------------------------------------------------------------------------
Procedure TVolume.SetIsMute(IsMute: Boolean);
Begin
  FIsMute := IsMute;
  If FIsMute = True Then
    waveOutSetVolume(0, 0)
  Else
    waveOutSetVolume(0, FVolume)
End;

// -----------------------------------------------------------------------------
// 函数名:   TVolume.GetLeftVolume
// 参数:     无
// 返回值:   Integer
// -----------------------------------------------------------------------------
Function TVolume.GetLeftVolume: Integer;
Begin
  If FIsMute = False Then
    waveOutGetVolume(0, @FVolume); //得到现在音量
  Result := Hi(FVolume); //转换成数字

End;

// -----------------------------------------------------------------------------
// 函数名:   TVolume.GetRightVolume
// 参数:     无
// 返回值:   Integer
// -----------------------------------------------------------------------------
Function TVolume.GetRightVolume: Integer;
Begin
  If FIsMute = False Then
    waveOutGetVolume(0, @FVolume); //得到现在音量
  Result := Hi(FVolume Shr 16); //转换成数字
End;

End.
Google
 
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们
龙脉加密锁 15元起 Grid++Report 报表 申请支付@网
 相关文章
没有相关文章
相关评论
共有评论11条 当前显示最后6条评论
superyoyonc 2004/6/13 14:52:03
把“waveXXXXX”改为“auxXXXXX”能变成控制CD音量!
jackalan 2004/6/19 17:18:14
整天说这个垃圾那个垃圾的,我看你***最垃圾,人家发个东西,你呢?光会放屁。只能调WAV是因为你太蠢了,学程序本来就要活学活用,连这个都不会,还学DELPHI?》回家***吧。。。
jialing 2004/8/12 13:16:25
我是个初学者,你能不能教我学好delphi?
nihaoqiang 2004/11/4 21:18:59
这种功能最好做成函数,使用类多了一些创建析构类的操作,有点大材小用了。
defrag 2004/12/4 14:12:59
真牛B,年级这么小就能写出这样的程序,佩服,佩服
a_abj 2005/1/19 14:08:35
继续努力
x下面播放广告 
www.fatthings.com
语音控件
我要发表评论 查看全部评论
 
  DELPHI盒子版权所有 1999-2023 V4.01 粤ICP备10103342号-1 更新RSS列表