数字音量控制

2024-06-09

数字音量控制(共5篇)

数字音量控制 篇1

1 综述

随着数字电视整体转换在全国的快速展开, 各地的广播电视台都纷纷建立了自己的数字电视运营平台, 进行数字电视试运营播出, 积累改造经验, 解决改造中的一些难题, 为整体转换打下良好的基础。

在数字电视发展初期, 以ASI切换矩阵作为传统数字前端设备调度平台实现的中心, 我们称之为第一代的数字电视平台。而新一代数字电视前端平台以IP路由软交换和统计复用码流修正功能为特色, 传统数字电视前端所固有的一些技术局限已经得到解决, 我们称之为第二代数字电视平台。徐州广播电视台是较早采用二代技术的市级台, 早在2005年就选用了具备模块化集成化设计的美国BIGBAND公司BMR宽带多媒体路由交换平台作为徐州数字电视前端。徐州台在有线电视数字化改造过程中, 许多用户反应各台伴音不均衡, 相差到了难以容忍的程度。我们将由此为契机来探讨数字电视中的伴音控制三种方案。

2 传统编解码方案

在模拟电视时代, 视音频调制需要调整的参数主要是视频的调制度, 伴音的频偏。过渡到数字电视时代, 由于输入编码器的视频信号均采用标准的1Vp-p全电视信号, 数字信号在传输过程中不会出现画面亮度的改变, 故各转播台一般不需要调整。但伴音信号在进入编码器之前的幅度没有统一的严格规定, 技术人员只有根据个人的经验进行主观的调整, 这就为伴音电平均值的差异形成提供了前提条件。

解决的方法之一就是将进入BIGBAND平台的所有ASI数字信号都解码成视音频基带信号, 再统一送入编码器编码 (如图1) 。编码器可提供模拟和数字音频/视频输

入接口, 对输入的音频和视频信号进行压缩编码, 输出符合MPEG-2标准的TS传输流;也可以通过SPI、ASI、DS3及E3接口与其他标准设备互连。在编码器上可以调整视音频信号的幅度, 反映到用户侧的电视机屏幕上为图像的亮暗变化与伴音的大小变化;通过仔细的反复调整, 也可把各台伴音基本调平, 其难度与模拟电视调整相一致。这两方面都与模拟电视的视频调制度和伴音频偏调整机理、现象有点类似, 故称为传统的编解码调整方案。

以徐州台现有的数字节目80余套计算, 这种方案就需80台编码器, 另需加约20台卫星接收机与解码器, 以便把所有的数字卫星信号解码成视音频信号和SDH下来的信号适配成编码器要求的输入信号格式, 这样就需300万元左右的预算。随着节目套数的增加, 积木式增加设备, 投资成线性增加。从调整的角度来讲, 依然是主观的判断, 没有客观的依据, 较难保证良好的效果。由于增加了编解码的环节, 也就增加了新的故障隐患点。编解码器的实质是对信号进行D/A、A/D转换, 这两个环节对信号的损伤最大, 也就是说这是一种有损调整方案。鉴于以上原因, 我台目前只在自办的五套节目中使用该方案。

3 终端机顶盒解决方案

机顶盒 (STB) 接收HFC网来的数字电视和各种数据信息, 通过解调、解复用、解码和音视频编码 (如图2) , 在模拟电视机上观看数字电视节目和各种数据信息。目前, 机顶盒主要提供基本音视频业务和数据应用, 在一段时期后, 将充分利用CATV网络的带宽实现交互功能, 最终发展成为集解压缩、Web浏览、解密收费和交互控制为一体的数字化终端设备。可以说, 在未来10年内, 机顶盒是模拟电视转向数字电视的桥梁。

在终端用户侧机顶盒上解决各台伴音均衡问题主要有两种方法:一是修改机顶盒的应用程序, 要求厂家提供在线升级程序可分别设置并保存每套节目的左、右声道或立体声设置及音量, 并具有掉电记忆功能。这种方法实现简单, 易操作, 但升级后仍然需用户自行调整, 且有个别版本盒子不支持升级, 问题解决得不彻底。二是在机顶盒数字音频D/A转换后, 电子音量调节前, 增加一级音频AGC, 自动控制调整的范围要达到±15dB。这是一种依靠电路硬件解决的方法, 优点是在网络终端就能解决问题, 其它环节都无需改动;缺点是增加了机顶盒的硬件成本, 对已发放机顶盒的用户只能提供换机服务。

在与厂家沟通时, 机顶盒解决方案要求每台增加20元的成本费, 那么以徐州市30万用户的规模计算, 潜在的成本过于高昂。不过, 随着机顶盒的大规模招标采购, 该项费用也在不断下降。由于机顶盒早已量产, 芯片也早已定型, 修改其硬件难度较高, 同时又考虑到软件升级较硬件改造的便利性, 我们折衷选用了第一种解决方案。在发放机顶盒时, 销售人员检验, 搜台, 调音后再发放下去, 从某种程度上讲也解决了问题。

4 新型的基于IP软交换技术的数字电视平台解决方案

码流修整 (Rateshaping) 是新一代数字电视前端的一项重要技术特征, 工作在节目层中的PID层, 主要用来处理过高的视频码流峰值, 可以改进这种技术用来处理音频流。将其核心的码率变换改为控制音频流中的比例因子的缩放, 以此来控制音量的大小。

由于可以有相同的压扩结构, 因此我们以较简单的层1来说明这种控制方案。图3是MPEG层1的帧结构, 在子带编码中, 传送前每个频带的音频输入需放大到最大电平, 放大的各个比例因子随同各个频带的各块样值一起发送, 以便解码器进行反处理。由此可见比例因子系数反比于该频带的电平, 若同时将各个比例因子进行放大或缩小一定的倍数, 则可以间接控制音量大小。音频层1利用512点FFT对滤波器组输出进行分析, 以确定输入信号的频谱, 产生384个输入样值;与此相区别, 层2采用1024点FFT作用于信号输入端, 样值达到1152个, 当子带内容大致相同时, 三个比例因子可以只发送一个。徐州台的机顶盒招标中要求自动兼容MPEG音频层1与层2。

BIGBAND平台根据PID值提出要处理的音频流, 通过对MPEG-2编码的逆处理, 将音频流解码过程执行到子带编码, 还原到量化层 (如图4) , 即MPEG音频流输入经解复用, 把比例因子提出送到缩放调整器进行调整后再送到复用器, 样值经缓存器缓存与调整后的比例因子同步对齐再送到复用器, 输出调整后的新码流。

缩放调整只是对比例因子乘上一个常系数, 数据处理量很小, 用软件实现即可, 无需昂贵的专用DSP处理器。由于没有解码还原到A/D (这一步骤对伴音的失真最大) , 采用这种方法实现的音量控制对伴音的失真较小。就目前市场上的数字电视设备来说, 还是一些国外厂家掌握第Ⅱ代DTV平台的核心技术, 至今还没有推出能支持此种功能的平台。若本土企业能考虑到电视台的实际要求, 开发出自主知识产权的相关产品, 必然能够对国内电视台和网络公司的前端系统搭建起到一个良好的支持。

5 总结

综上所述, 三种方案比较结果如表一。编解码方案实现方法简单, 但会使前端系统复杂度增加, 只适用于自办节目的调整。机顶盒硬件方案效果好, 但潜在的成本太高, 目前只能采用软件的方法进行折衷。而基于IP软交换技术的数字电视平台的软件解决方案具有系统简单, 失真小, 实现成本低的优点, 应是解决此类问题的发展方向。

摘要:在徐州电视台数字电视改造过程中, 遇到了各频道间音频不均衡的难题, 本文将以此为背景讨论三种音频控制解决方案:编解码器方案、机顶盒方案、基于IP软交换技术的数字电视平台方案。通过方案对比, 指出数字电视平台方案才是今后的发展方向。

关键词:音量控制,机顶盒,MPEG,数字电视

参考文献

[1]王路.浅析第Ⅱ代DTV平台中几项关键技术[J].中国有线电视, 2007.

[2]Seth Kenvin.Grooming by demand, Iinstead of by supply[R].2006.

[3]王宇峰.基于IP路由软交换技术的新一代数字电视前端平台[J].有线电视技术, 2007 (, 7) .

[4]Tektronix.MPEG基础和协议分析指南[M].泰克有限公司:23-28.

[5]马磊.有线数字电视前端系统备份的新思路[J].广播与电视技术, 2006, (12) :108-109.

数字音量控制 篇2

一、播放器中音量控制

对于常见的播放器中,就已经默认允许使用快捷键控制音量的变化。例如WindowsMediaPlayer中按F9可以使音量降低,按F10可以增大音量;在Winamp中按“Ctrl+Alt+↓”可以降低音量,按“Ctrl+Alt+↑”可以增大音量;在MPC中,可以分别用“Win+↓(↓)”来使音量变小或增大;在超级解放中音量控制则要以使用“Ctrl+‘-’(‘+’)”来调整。

二、工具辅助

在其它场合下要改变音量的大小,可以借助HotkeycontrolXP来完成。下载安装该软件后,我们就可以按下“Ctrl+‘-’”来降低音量,按下“Ctrl+‘+’”可以增大音量,并且在调整的时候,屏幕下方还会显示音量进度条,便于观察控制音量的大小,

三、自定义控制

我们还可以通过修改注册表,让键盘上一些使用频率不高的键来充当音量控制按键。

打开记事本,在其中输入如下内容:

WindowsRegistryEditorVersion5.00

[HKEY_LOCAL_MACHINESYSTEMCurrentControlsetControlKeyboardLayout]

“ScancodeMap”=hex:00,00,00,00,00,00,00,00,04,00,00,00,20,e0,46,00,30,e0,5f,e0,2e,e0,63,e0,00,00,00,00

将该文件保存为REG格式,然后双击该文件将其导入到注册表。重新启动电脑,我们就可以使用键盘上的WakeUP键降低音量、用Sleep提升音量,用ScrollLock关闭声音(静音)了。

浅谈数字电视音量控制 篇3

随着数字电视整体转换在全国的快速展开, 各地的广播电视台都纷纷建立了自己的数字电视运营平台。由于电视节目来源不同, 不同频道的伴音音量可能存在较大差异。因此, 人们时常被频道间、节目片断间的音量跳变所困扰。为了提供更好的数字电视服务, 需要对音频音量进行均衡处理。音量均衡既可在解码终端实现也可在节目制作前端完成。

二、数字电视音量控制方案

1、传统编解码方案

数字电视中的音频编码主要采用MPEG-1层2标准, 编码处理中首先将16 bit的音频PCM采样数据送入分析滤波器组, 将信号变换为32个子带抽样值, 每个子带含有36个抽样值, 每12个抽样值组成一个块, 对每块数据分别进行归一化后再编码。在对一个数据块的归一化处理中, 需要根据标准给出的比例因子数组进行选择, 所选的比例因子sf应大于本数据块的绝对极值, 并且与本数据块的绝对极值的差值最小。得到sf后, 块内所有的抽样值采用比例因子进行归一化, 得到待编码数据。

然而随着节目套数的增加, 积木式增加设备, 投资成线性增加。从调整的角度来讲, 没有客观的依据, 较难保证良好的效果。由于增加了编解码的环节, 也就增加了新的故障隐患点。编解码器的实质是对信号进行D/A、A/D转换, 这两个环节对信号的损伤最大, 也就是说这是一种有损调整方案。

2、机顶盒解决方案

数字机顶盒 (STB:Set Top Box) 由硬件平台和软件系统组成, 硬件提供机顶盒的硬件平台, 底层软件提供操作系统内核以及各种硬件驱动程序。

在终端用户侧机顶盒上解决各台伴音均衡问题主要有两种方法:一是修改机顶盒的应用程序, 要求厂家提供在线升级程序可分别设置并保存每套节目的左、右声道或立体声设置及音量, 并具有掉电记忆功能。二是在机顶盒数字音频D/A转换后, 电子音量调节前, 增加一级音频AGC, 自动控制调整的范围要达到±15d B。但是, 由于同一频道中不同时段节目的制作参数不同, 以及人们收视习惯的千差万别, 采用存储音量设定值的方法无法准确地完成音量均衡, 有时还会使音量跳变加剧。

3、EPG音量控制方案

电子节目指南 (EPG, Electronic Program Guide) , 是指在符合MPEG-2的TS传输流中插入DVB标准定义的业务信息 (SI, Service Information) , 使机顶盒的综合接收新型的基于IP软交换技术的数字电视平台解决方案解码器 (IRD) 可以从TS流中提取出节目提供商播出节目的列表和播出参数, 以直观的形式显示给数字电视用户, 使得用户可以方便地接收、选择数字电视节目。该方案的优点是不需要对系统任何硬件修改, 只需要对EPG服务器端和机顶盒软件升级即可, 后继入网的各类机顶盒需要厂家集成该功能。至目前为止, 该方案是较为可行的方案之一。

4、新一代数字电视平台的解决方案

数字电视发展初期, ASI切换矩阵作为传统数字前端设备调度平台实现的中心, 我们称之为第一代的数字电视平台。而新一代数字电视前端平台以IP路由软交换和统计复用码流修正功能为特色, 传统数字电视前端所固有的一些技术局限已经得到解决, 我们称之为第二代数字电视平台。

码流修整 (Rate shaping) 是新一代数字电视前端的一项重要技术特征, 工作在节目层中的PID层, 主要用来处理过高的视频码流峰值, 可以改进这种技术用来处理音频流。将其核心的码率变换改为控制音频流中的比例因子的缩放, 以此来控制音量的大小。

在子带编码中, 传送前每个频带的音频输入需放大到最大电平, 放大的各个比例因子随同各个频带的各块样值一起发送, 以便解码器进行反处理。由此可见比例因子系数反比于该频带的电平, 若同时将各个比例因子进行放大或缩小一定的倍数, 则可以间接控制音量大小。

结束语

第一种编解码方案实现方法简单, 但会使前端系统复杂度增加, 只适用于自办节目的调整, 而且随着节目的增多, 费用增加太快, 不适合大规模推广。第二种机顶盒硬件方案效果好, 但潜在的成本太高, 目前只能采用软件的方法进行折衷。第三种EPG方案是目前最为可行推广的方案, 应用效果还有待试验中, 但是随着机遇IP软交换技术的使用, 这种方法的优越性大打折扣。而基于IP软交换技术的数字电视平台的软件解决方案具有系统简单, 实现代价小的优点, 应是解决此类问题的今后的发展方向, 广泛被人们所关注。

摘要:数字电视业的蓬勃发展, 爆发出喜人的活力, 而图像和声音正是影响观众满意度的两个重要因素, 声音的不统一, 音量忽高忽低会严重影响观众的满意度水平, 影响数字电视的进一步发展。本文分析了几种数字电视音量的控制方案, 并进行了对比, 认为基于IP软交换技术的数字电视平台的软件解决方案是未来的发展方向, 能够很好满足音量均衡的功能。

数字音量控制 篇4

关键词:节传信号监听,遥控音量控制

1 前言

节传机房担负着全台音周信号的传输发送, 为确保节目传输的正确性和质量, 必须加强对输出节目信号的监听。近年来, 节传机房在改造过程中, 出于自动化和人性化的考虑, 控制室与设备间分别独立, 功放、音频选择器、D/A转换器等监听设备都放在设备间, 而音箱则放置在控制室, 调节监听音量的大小时, 必须进入设备间操作。因我台电话调度频繁, 监听音量过大会干扰电话调度, 而监听音量过小, 又影响监听效果, 且人耳朵对监听音量大小有白天和夜晚差别, 因此使得监听音量的调节操作十分频繁, 为解决音量调节操作的不便, 我们设计了遥控音量控制装置。

2 遥控音量控制装置

遥控音量控制装置分为三个部分, 即遥控器、接收器及四抽头衰减器。其中, 遥控器由遥控发射电路组成, 接收器由接收头、SC2272解码电路、继电器等组成。其系统框图如图1所示。

2.1 遥控器

遥控器也称为射频遥控发射电路, 主要由编码电路、射频功放输出、发射电路等部分组成, 其工作原理如图2所示。

(1) 编码器

编码器SC2262的功能就是对高频功率放大电路送来的信号进行编码, 其内部原理如图3所示。编码器发出的编码信号由地址码、数据码和同步码等组成, 这些码共同组成一个完整的码字。当遥控器上有按键被按下时, SC2262得电工作, 其内置的315MHz的高频发射电路起振, 并发射等幅高频信号, Dout脚输出的是经调制的串行数据信号。

(2) 主振电路

主振电路用以生成载波信号, 在本系统中, 采用由石英晶体XT (R315) 组成的石英晶体振荡器, 产生315MHz高频载波信号。使用石英晶体进行稳频, 其稳定度容易做到10-5以上, 而且不易受人体感应及分布电容等影响, 因此在实用射频遥控装置中经常使用。

石英晶体的内部晶片由两根引脚引出, 外部以金属壳体密封。晶片本身有一固有的机械振荡频率, 它与晶片的几何尺寸有关, 当外加高频电压的频率与晶片的固有频率接近或相等时, 流过晶片的电流骤增, 出现谐振现象, 这种谐振特性曲线非常尖锐, 稳定振荡器的频率就是利用这一特性。

(3) 高频功率放大电路

由主振级输出的高频载波信号, 其功率很小, 一般均不能满足遥控距离的要求, 需要进行功率放大后从天线送出, 才能发射较远的距离。本系统采用了Q1、Q2两级均工作于丙类的共发射极组态, 级间耦合用电容分压实现。丙类调谐放大器适用于放大等幅信号 (见图2) 。

(4) 天线

天线是发射电路中很重要的一个组成部分, 它是功率放大输出级的负载, 功放级输出的载频信号必须经由天线形成电磁波向空中辐射出去。天线设置正确与否, 将直接关系到功放电路的工作状态和输出功率, 因此对遥控距离具有举足轻重的影响。

该系统采用的是可伸缩的拉杆天线, 它是鞭状天线的一种, 在遥控设备中广泛使用。其等效图可用图4表示。由图4可以看出, 天线实际上是LC回路, 其与一般的LC回路不同的是, 天线的电感与电容是分布在天线的各个部分, 而一般的LC回路电感和电容都是集中的, 因此也把天线称为开路的LC回路。当高频电压接入天线后, 天线内即有高频电流流过, 在天线的周围就会产生交变的电场与磁场, 由于天线是开路的LC回路, 使电磁场的变化暴露在空间, 电场与磁场的交替变化就会由近而远地向外传播, 形成电磁波。

2.2 遥控接收器

射频遥控接收器分为遥控接收电路、解码电路和驱动控制电路三部分, 简单地说, 它的作用和任务就是将天线接收来的微弱载波信号放大、解调、译码恢复成遥控命令, 去驱动与指令信号相对应的电路。

(1) 遥控接收部分

由接收天线、输入选频回路、高频放大、超再生电路、脉冲信号放大整形电路组成。其功能是将遥控器发出的高频载波信号进行选频、放大、解调, 输出符合解码电路要求的脉宽数据信号, 电路原理如图5所示。

由接收天线感应到遥控器发出的高频信号经L1、C1电路选频后, 经C2耦合到高频放大电路。V1为高频放大管, 是典型的共射极单管甲类电压放大器, 放大后的高频信号从V1的集电极输出, 经C3耦合到超再生电路。

超再生电路由V2、L3、C6等元件组成, 其中V2工作在振荡状态, L3、C6组成接收头的主要选频网络, 调整L3线圈中的铜心位置, 可以在一定范围内微调接收头的工作频率, 称为调感式接收头。

解调后的低频脉宽数据信号从三极管V2的发射极输出, 经L2、R8、C9电路耦合到后面的放大、整形电路, L2、C9对高频残留波起抑制和滤除作用。

放大、整形电路由U1 (LM358M) 双运放内部的两个运放组成的两级不同增益的放大器来完成, 两级放大器之间采用电容C11耦合, 最终从U1的 (1) 脚输出幅度和波形符合解码处理电路要求的低频脉宽数据信号。

(2) 解码电路

SC2272是与SC2262配对使用的一块遥控解码专用集成电路, 其内部原理与SC2262相似 (见图6) , 采用CMOS工艺制造, 它最大拥有12位的三态地址管脚, 可支持多达531441 (或312) 个地址的编码。因此极大地减少了码的冲突和非法对编码进行扫描, 以使之匹配的可能性。

接收头与SC2272的连接线路图如图7所示。SC2272对从Din端子 (14脚) 送入的信号进行解码。所送入的编码波形被译成字码, 它含有码地址位, 数据位和同步位, 解码出来的地址码与所设置地址输入端进行比较。SC2262每次发射时, 至少发射4组字码, 如果所设置的地址与连续2组的字码匹配, 且解码得到有“1”数据时, SC2272驱动第17端为高电平。四个数据输出端经三级管放大后, 分别连接到驱动控制电路上的四个继电器。

(3) 驱动控制电路

为实现音量控制, 就要将由电阻丝绕制的不同阻值的绕组串入功放信号的输出端, 通过控制串入绕组阻值的大小来控制音量的大小, 串入功放信号输出端的四抽头绕组与控制板四路输出的连接方式如图8所示。

SC2272对输入信号进行解码后, 将相应的数据输出端置为高电平, 控制对应的继电器使之吸合, 从而达到调节线圈绕组的目的。

2.3 整体电路的工作流程

(1) 上电后SC2272进入待机状态。

(2) 按下遥控器按钮时, 通过已设置好的编码器输出信号, 输出信号经过发射电路发送出去, 控制板上的接收板检测到信号, 并将处理后的信号输入SC2272的Din端子 (14脚) , 由SC2272完成接收码地址与设置码地址比较。在无接收信号的情况下, 控制板将停留在待机状态。

(3) 当接收码地址与设置码地址相互匹配时, 数据存于寄存器中。当检查到连续两帧的码地址都匹配, 且数据都一致时, 相应的数据输出端有控制信号输出, 使相应的继电器吸合, 串入监听回路的电阻值发生相应变化, 使监听音量发生改变;当连续两帧的码地址不匹配时, 输出端不会被驱动, 对于瞬态输出型来说, 输出数据复位, 而对于锁存输出型来说, 则输出数据维持原态。

3 结束语

出于实用性及性价比的考虑, 该控制器我们采用的是四路控制, 能满足目前的工作需求, 但也存在音量跳变比较大、调节范围小的缺点。如果今后还有类似需要, 可以对本系统进行改进, 达到音量连续控制的目的。

我们改进的设想如下:

(1) 增加继电器及调节绕组的数量, 缩小调节跨度, 使音量调节得更加平滑, 做到近似连续调节;

(2) 对遥控器进行改造, 改成只有两个控制按钮, 一个是音量增加, 另一个是音量减小;

(3) 增加寄存器, 存储当前继电器的开合状态;

(4) 增加计数器 (或移位寄存器) , 对音量加 (或减) 按钮控制次数进行累计 (或移位) , 控制相应的继电器, 达到音量连续控制的目的。

近年来, 随着节传机房职能由单纯的节目传送向全台安全发射总控中心的转变, 机房的设备不断更新换代, 自动化程度大大提高, 只要在工作中, 善于发现、勤于思考、勇于动手, 就能使我们工作处于更合理、更科学、更轻松的状态。

参考文献

[1]梁廷贵.现代集成电路实用手册[M].北京科学技术文献出版社, 2002:56-59.

[2]何书森.实用遥控电路原理与设计速成[M].福建科学技术出版社, 2002:2-16.

[3]何书森, 何华斌.实用电子线路设计速成[M].福建科学技术出版社, 2004:179-193.

为标准键盘定制一组音量控制键 篇5

1 声音控制

Windows XP和Win7对声音的控制是不同的, 具体来说在Windows XP中可以使用waveout Get Volumn和waveout Set Volumn这两个Win32 API来获取和设置系统主音量, 根据MSDN文档的说明, 这两个API函数都对DWORD变量进行操作, 这个变量的高16位是右声道, 低16位是左声道, 0xffff表示满音量, 0表示无音量, 可以采用类似下面的位操作来拼接出DWORD变量:

uint vol= ( (uint) vol Left&0x0000ffff) | ( (uint) vol Right<<16) ;

由于编程及测试环境都是Windows 7, 因此下文主要针对Windows 7来介绍, 如果读者希望在Windows XP下完成本程序, 请自行参阅参考文献1。在Windows 7环境下需要使用MMDevice API和Endpoint Volume API来操控主音量, 这相对复杂, 好在有前人写好了帮助类, 只需要调用帮助类的相关方法就可以了, 具体说明可参阅本文的参考文献2, 下面给出示例代码:

这些代码分3个部分, 首先要建立帮助类的对象, 通过MMDevice来获取End Point对象, 后面的操作都是与Endpoin对象打交道, 获取主音量的大小需要使用Endpoint对象的Audio Endpoint Volume对象的Master Volume Level Scalar属性, 这个属性的大小范围是0.0-1.0, 用它去乘以进度条的最大长度就可以得到进度条的相应指示。最后要注册Audio Endpoint Volume的On Volume Notification事件, 这个事件是当音量发生变化时被激发的, 通过注册这个事件, 就可以在音量变化时重新绘制进度条。示例代码如下:

请注意, 在这个事件处理程序中, Audio Volume Notification Data类的参数data的Master Volume属性指示了当前的主音量, 这个值的范围也是0.0-1.0, 因此设置进度条的方式与上面初始化时是相同的。最后说明下增加和减小音量, 这非常方便, 帮助类已经提供了相应的方法, 代码如下:

2 注册热键

下一步是完成注册热键 (Hotkey) 的过程, 由于要达到的目标是一键控制音量增大和减小, 因此必须在程序中注册全局热键, 这就要使用Register Hotkey这个API, , 具体代码如下:

这里注意, 使用了数字小键盘上的“+”和“/”来分别定义这两个键, 读者可以根据自己需求改动, MSDN文档说明了, 应该使用键盘的VK_CODE来作为参数传送给API, 可以在MSDN文档中查找到所有键的VK_CODE, 不过C#为定义了一个枚举变量Keys, 可以使用这个枚举来作为参数传递给API。注册完热键后, 需要覆盖 (override) Wnd Proc函数来处理WM_HOTKEY消息, 代码如下:

当然不要忘了在程序退出时还必须使用Unregister Hotkey这个API来释放热键, 代码如下:

3 显示音量状态

到目前为止, 实际上已经完成了这个程序的基本功能, 按动键盘就可以使音量增大或减小, 但是如果不给用户一个感官的提示, 用户无法获得感性的对音量大小的认识, 因此笔者还设计了一个在按动热键后短暂停留在桌面右下角的对话框, 用以提示当前的音量, 如图1所示。

要完成图1的设计首先需要在程序一启动就将窗体停靠在桌面右下角的位置, 代码如下:

这里, 使用了C#的Screen类, 其中Working Area属性返回的是桌面上除了任务栏外的边框区域, 通过这个区域与窗体自身的区域的计算, 就可以将窗体停靠到桌面右下角位置。当然根据本程序的应用环境, 设计了程序启动后将自动隐藏到托盘, 于是就需要在上文提到的Wnd Proc函数中响应热键时调用Show Wnd函数, 代码如下:

这里需要注意两点, 由于设计时在窗体的Shown事件时添加了将窗体最小化的代码 (为了实现启动即缩小到托盘) , 因此如果只在此函数中调用Show, 只能将窗体显示出来, 而窗体仍然保持在最小化状态, 因此必须将窗体恢复normal状态。另外, 之所以要在函数一开始先将timer_close这个计时器disable, 是因为存在用户连续点击键盘热键的情况, 这个计时器的目的是在计时器interval时间达到后将窗体重新隐藏, 如果用户连续点击热键, 那么有可能用户后续的点击发生后窗体很快就隐藏了 (因为窗体隐藏的时间段是从第一次用户点击热键开始计算的) , 通过在函数开头先将计时器disable, 可以做到窗体关闭是从用户最后一次点击开始计算interval时间段的。计时器的激活响应处理很直观, 代码如下:

4 自定义进度条

最后看看如何做到上文图示中的进度条效果, 如果使用C#默认的Progress Bar控件, 可以显示一个进度条, 但无法在其中同时显示文字, 要做到上文图示的效果, 必须使用自定义控件, 下面是笔者定义的text Progress Bar控件的代码:

这里做一些解释, 首先[Toolbox Item]特性的定义将给VS IDE一个提示, 让IDE将这个自定义控件中的Public枚举变量放到IDE的属性编辑器里, 以方便可视化设置属性, 代码里设置了Text Color, Text Font, Bar Color 3个属性, 分别代表文字的颜色、字体以及进度条的颜色。请特别注意定义的构造函数中两个Set Style函数的调用, 第一个函数是用于通知系统控件准备自绘制, 这非常重要, 如果没有这条语句, 即使重写了On Paint函数也没有实际效果。第二个Set Style用来平滑进度条的高速变动, 如果用户连续点击热键, 如果没有这条语句, 进度条变动时可能出现闪烁。随后的代码就是在On Paint函数中绘制进度条和文字了, 绘制时根据3个属性来配置画刷, 随后根据Progress Bar的Value属性确定进度条该在的位置, 至于文字可以始终显示在整个控件的中间, 需要注意的是必须先绘制进度条, 再绘制文字, 否则文字会被进度条覆盖。另外由于设置了自绘制, 因此基类的Style属性将不会有直接效果, 除非在On Paint函数中针对此属性做不同的绘制, 代码中并没有这样做, 读者可自行完善。

5 结语

通过C#编程, 将普通标准键盘变身带有音量控制键的自定义键盘, 方便了用户增加或减小音量, 一个小小的工具达到了许多品牌机电脑才有的功能, 读者可进一步完善程序, 实现更好的效果。最后提醒读者, 示例代码只能用于Windows 7系统, 若在Windows XP系统下运行, 必须按前面描述的自行修改音量控制部分代码。

摘要:通过定义热键给标准键盘添加一组控制音量的热键, 模拟笔记本电脑的功能。

关键词:热键,音量控制,自定义进度条

参考文献

[1]http://msdn.microsoft.com/en-us/library/aa719104 (VS.71) .aspx.

[2]http://www.codeproject.com/Articles/18520/Vista-Core-Audio-API-Master-Volume-Control.

上一篇:形成因素下一篇:海洋及船舶