wince 下音量调节问题

lysk1229   2008-12-8 15:51 楼主
问题1,我的wince5.0设备,系统启动声音,触摸屏点击屏幕声音以及自己播放音乐的声音都很大(控制面板中的音量为最大),可是在与通过TCP/IP方式连接的相应设备进行可视对讲时,对方基本听不到我的声音(偶尔能听到很小的声音),我基本能听到对方的声音,声音也不太大。请问各位高手,这可能是什么原因?是我这边应用程序发出音频流的音量小吗?可是我已经设置成最大值了啊?
   如下:
     if( (error=waveOutOpen( &inst->handle , WAVE_MAPPER , &format , (DWORD)waveInProc , (DWORD)   inst , CALLBACK_FUNCTION) )
                        !=  MMSYSERR_NOERROR )
                {
                        hw_trace_msg( HW_TRACE_ERROR , "JAudioDevice::OpenOutput fail %d\n" , error );
                        error = 4;
                }
                if(!error)
                {
                        if( waveOutSetVolume(inst->handle, 0xFFFF) == MMSYSERR_NOERROR )           

               {
                    MessageBox(NULL,_T("音量设置失败"),0,0);
               }

问题2,我从网上查相关音量修改的资料,有说注册表有这一项:HKEY_CURRENT_USER\ControlPanel\Volume下,但是我的注册表里并没有这一项,请问这是需要自己添加的吗?要是我没有添加,系统会有一个默认值吗?


问题3,程序运行时提示程序内存严重不足,我想把wince下的存储内存和程序内存比例调节一下,增大程序内存、。请问除了系统启动后从控制面板里修改,有没有办法可以在定制系统的时候就修改掉,不用每次启动系统都修改一次!




回复评论 (11)

看看waveOutSetVolume函数的用法
点赞  2008-12-8 15:56
waveOutGetVolume()得到当前的值看看是多大?
如果不是最大,调用waveOutSetVolume()进行设置。

内存不中,可能是LZ的程序有内存泄露的问题哦。当然如果代码没有问题,就说明LZ的程序在开始设计的时候,就没有考虑过CE的特点,还是用PC上的思路进行设计的。要从源头进行修改,不要总是想着修改、定制系统。
点赞  2008-12-8 16:19
设置声音大小就是waveOutSetVolume
如果还是太小可以自己把wavein得到的PCM数据乘上增益因子,这是个饱和运算注意溢出的问题

调节内存比例
GetSystemMemoryDivision
SetSystemMemoryDivision
点赞  2008-12-8 16:29
这种情况我在调蓝牙耳机的时候遇到过,如果软件上没有问题你就要去查你的音频芯片里面的功放设置了,就WM9713这款芯片,内部的放大器就有很多,不同的路由放大器都不同,你说的那种什么对话情况下的芯片放大器有没有打开到最大?这里需要驱动的支持,如果你是上层应用的话,我估计很难查出问题。
点赞  2008-12-8 17:20
Q1.那你要检查下硬件上是不是没有问题。然后检查下你声音输入部分的处理芯片操作是否正确,这个当然是软件上的。不要还是输入状态没开启,没开启怎么叫破嗓子都出不了声音。
Q2.HKEY_CURRENT_USER\ControlPanel\Volume...这个是标配啊。。你再PLATFROM.REG文件里找找。。没有就很奇怪啊
Q3.。。。。我现在用的是256Mbytes的nandflash,32Mbytes的SDROM。。貌似还是可以。。没遇到过
点赞  2008-12-8 17:28
1、输入输出是完全不同的两个通道,检查录音的增益,这个在控制面板里好象没有地方设定的
2、默认设定在wceshellfe.reg,一般用于设定默认的音量
; 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

3、可以通过config.bib中的FSRAMPERCENT来调节程序和存储内存的比例
点赞  2008-12-8 18:29
谢谢各位的指点!受益不少!我去试试!回来再和大家讨论,放分啊!
点赞  2008-12-9 08:25
回复: 91program
     想请教一下,我只知道PC和WINCe上编程的不同就是:一些API 会不同,wince上RAM比较少,程序需要尽量精简!您所说的程序设计时考虑的CE的特点指哪方面,需要考虑些什么啊?

点赞  2008-12-9 09:44
回复navi_dx :
   不明白你说的wavein得到的PCM数据乘上增益因子,这是个饱和运算注意溢出的问题 ?
    我知道用waveInStart( inst->handle );来接收数据到缓存区,请问怎么乘增益因子啊?
点赞  2008-12-9 09:58
如果驱动支持的话,应使用mixer打头的函数:mixeropen,mixergetlineinfo等调节麦克风和扬声器的音量。
点赞  2008-12-21 22:28
做个记号学习一下
点赞  2010-6-19 11:17
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复