Wave Driver介绍-6(控制面板中的音量调整工具)
来源:互联网 发布:襄阳中百淘宝生态城 编辑:程序博客网 时间:2024/05/22 14:21
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 ffff。Debug 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。
- Wave Driver介绍-6(控制面板中的音量调整工具)
- Wave Driver介绍-6(控制面板中的音量调整工具)
- Wave Driver介绍-7(驱动中对音量的控制操作-非硬件音量控制)
- Wave Driver介绍-7(驱动中对音量的控制操作-非硬件音量控制)
- WINCE 修改设备音量(控制面板)
- Wave Driver介绍-4(Wave API waveOutOpen)
- Wave Driver介绍-3(Wave API waveOutSetVolume)
- Wave Driver介绍-3(Wave API waveOutSetVolume)
- Wave Driver介绍-1(PCM文件格式)
- Wave Driver介绍-2(WAV文件格式)
- Wave Driver介绍-8(软件混音器)
- Wave Driver介绍-1(PCM文件格式)
- Wave Driver介绍-2(WAV文件格式)
- Wave Driver介绍-8(软件混音器)
- Wave Driver介绍
- Wave Driver介绍-5(Waveform Audio Driver Test测试Case描述)
- Wave Driver介绍-5(Waveform Audio Driver Test测试Case描述)
- WinMain中的音量控制
- 会计中的辅助核算
- 随便谈谈
- 手机开发FD--Flash Developer配置
- 3D扫描仪:微软将3D扫瞄功能加入Kinect,可支持3D打印
- OncePerRequestFilter
- Wave Driver介绍-6(控制面板中的音量调整工具)
- 跟Google学习Android开发-起始篇-用碎片构建一个动态的用户界面(2)
- dd命令详解
- 标准C++中的string类的用法总结
- 键盘的开、关控制
- Wave Driver介绍-7(驱动中对音量的控制操作-非硬件音量控制)
- mysql 多列索引和多个单列索引
- input标签写CSS时需要注意的几点
- oracle11g 源