问题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下的存储内存和程序内存比例调节一下,增大程序内存、。请问除了系统启动后从控制面板里修改,有没有办法可以在定制系统的时候就修改掉,不用每次启动系统都修改一次!
waveOutGetVolume()得到当前的值看看是多大?
如果不是最大,调用waveOutSetVolume()进行设置。
内存不中,可能是LZ的程序有内存泄露的问题哦。当然如果代码没有问题,就说明LZ的程序在开始设计的时候,就没有考虑过CE的特点,还是用PC上的思路进行设计的。要从源头进行修改,不要总是想着修改、定制系统。
设置声音大小就是waveOutSetVolume
如果还是太小可以自己把wavein得到的PCM数据乘上增益因子,这是个饱和运算注意溢出的问题
调节内存比例
GetSystemMemoryDivision
SetSystemMemoryDivision
这种情况我在调蓝牙耳机的时候遇到过,如果软件上没有问题你就要去查你的音频芯片里面的功放设置了,就WM9713这款芯片,内部的放大器就有很多,不同的路由放大器都不同,你说的那种什么对话情况下的芯片放大器有没有打开到最大?这里需要驱动的支持,如果你是上层应用的话,我估计很难查出问题。
Q1.那你要检查下硬件上是不是没有问题。然后检查下你声音输入部分的处理芯片操作是否正确,这个当然是软件上的。不要还是输入状态没开启,没开启怎么叫破嗓子都出不了声音。
Q2.HKEY_CURRENT_USER\ControlPanel\Volume...这个是标配啊。。你再PLATFROM.REG文件里找找。。没有就很奇怪啊
Q3.。。。。我现在用的是256Mbytes的nandflash,32Mbytes的SDROM。。貌似还是可以。。没遇到过
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来调节程序和存储内存的比例
谢谢各位的指点!受益不少!我去试试!回来再和大家讨论,放分啊!
回复: 91program
想请教一下,我只知道PC和WINCe上编程的不同就是:一些API 会不同,wince上RAM比较少,程序需要尽量精简!您所说的程序设计时考虑的CE的特点指哪方面,需要考虑些什么啊?
回复navi_dx :
不明白你说的wavein得到的PCM数据乘上增益因子,这是个饱和运算注意溢出的问题 ?
我知道用waveInStart( inst->handle );来接收数据到缓存区,请问怎么乘增益因子啊?
如果驱动支持的话,应使用mixer打头的函数:mixeropen,mixergetlineinfo等调节麦克风和扬声器的音量。