Wave Driver介绍-6(控制面板中的音量调整工具)
来源:互联网 发布:网络机顶盒vip破解软件 编辑:程序博客网 时间:2024/05/18 12:40
当环境变量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中的音量控制
- Audio Codec介绍-7(声音强度的定义)
- 关于javascript的两点注意事项
- 常见浏览器CSS兼容性对比图
- 盗梦空间——java源码实现
- 关于基于插件式开发的软件项目
- Wave Driver介绍-6(控制面板中的音量调整工具)
- SQL Server数据查询基本方法的探讨
- 【原创】由一道面试题说起
- 一道面试题的探讨(一)
- 向sp1234前辈学习下
- 组策略安全选项对应注册表项汇总
- vc添加一个类数据成员
- 组策略安全选项对应注册表项汇总
- 组策略安全选项对应注册表项汇总