Wave Driver介绍-6(控制面板中的音量调整工具)

http://blog.csdn.net/daydayupfromnowon/article/details/6006794

 

当环境变量CPLMAIN_SOUNDS置位的时候,控制面板中出现音量控制的应用程序Volume&Sounds.exe,如下图所示:

其中,注册表中定义了Volume&Sounds.exe的默认配置值,如下图所示:

; Sound CPL registry values

[HKEY_CURRENT_USER/ControlPanel/Volume]

     "Key"=dword:10002      ; Keyclicks: 1=soft, 0x10002=loud

     "Screen"=dword:10002   ; ScreenTaps: 1=soft, 0x10002=loud

     "Mute"=dword:7              ; 7=Enable all sounds (1=Notifications, 2=Apps, 4=Events.)

     "Volume"=dword:99999999 ; 0=off, 0xFFFFFFFF=maximum

         应用程序Volume&Sounds.exe调整和控制的是设备音量(实际上就是调用waveOutSetVolume去配置设备音量),同时还可以配置各种与用户交互的行为下的声音,比如通过Sounds选项卡去配置用户点击屏幕的声音。

         当用户点击OK退出,则保存当前的所有配置,而当选择叉号退出的话,则不保存当前选择的配置。

有关该应用程序更加详细的Stack,可以参照CE下源代码:

/PUBLIC/WCESHELLFE/OAK/CTLPNL/CPLMAIN/Volume.cpp

1.       应用程序中对音量的控制

应用程序中有两种方式对音量控制,即可以来控制设备音量,也可以来控制当前Stream的音量,都通过调用wave api waveOutSetVolume来实现,有关该函数的更加详细介绍,请参照“Wave API waveOutSetVolume”。

         一般情况下,调用底层wave api来播放音频的话,遵循如下的流程:waveOutOpenà waveOutPrepareHeaderà waveOutWriteà waveOutResetà waveOutUnprepareHeaderà waveOutClose。

         那么,当前流的默认音量是多少呢?

在Wave Driver初始化的时候,将会创建DeviceContext类的实例(驱动中将会去根据具体的Audio Codec来继承该类),其成员m_dwDefaultStreamGain保存了默认的流的音量,该值在用户调用waveoutopen的时候传递给具体的stream实例中保存。如果上层没有给wave driver传递具体的Stream音量的话,驱动中将会去使用该音量做为流默认的音量。

遗憾的是,这种机制没有机会使用了。经过反复测试发现,在应用层中调用waveOutOpen创建Stream的话,系统层会在函数waveOutOpen内部实现中将流的音量配置为0xffff ffffDebug Info如下:

*******WODM_OPEN, uDeviceId=0x0*******

nSamplesPerSec 0x5622, nChannels 0x1, m_dwMultiplier 65536

WODM_SETVOLUME. dwGain 0xffffffff, NumDevs 1, pStreamContext One, sizeof(dwGain) 4

         在使用播放器播放音频的时候,打开一个音频文件时系统同样会将Stream音量配置为0xffff ffff,然后播放器再去获取用户上次使用播放器的时候配置的Stream的音量,最后将这个值配置给Wave Driver。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值