WINCE音量调节的实现

在没有硬件音量调节功能的WINCE平台上,通过软件算法实现音量调节。文章介绍了WAVemain.cpp中处理音量调节的代码,包括WODM_GETVOLUME和WODM_SETVOLUME两个关键函数,以及软音量设置的GainChange和MapGain函数,通过映射到预定义的GainMap表来调整音量。
摘要由CSDN通过智能技术生成

WINCE音量调节的实现

刘启明 2010-5-8

WINCE平台下,用户可以通过设置控制面板的音量调节按钮,实现系统音量的调节。同时,如果使用一些媒体播放器,如mplayer,则可以对输入的音频流实行单独的调节,而不影响系统其他的音量。我们可以把整个架构理解为WINDOWS平台,用户通过设置右下角的声音按钮,实现整个系统的音量设置,而在播放如千千静听,暴风影音时,可以单独的设置软件的音量,而不影响整个系统的音量。WINCE的音量调节模型正是如此。

在手持机上,会用到专业的音频芯片,比较典型的有UDA1341WM8976WM9713等。这些芯片都留有I2C接口,供处理器设置芯片的寄存器,从而达到调节音量等的功能。在底层驱动中,通过留相应接口,实现在调节控制面板里面的音量时,最终调节音频芯片的寄存器,实现音量调节。

这是最常用的一种方法。但是有些OEM厂商为了节约成本,在硬件上大做文章,选择的音频芯片根本没有音量调节的功能,甚至连I2C接口都没有,仅有一个I2S接口用于音频解码。那么这时候,WINCE是否还能像前面的那样,实现音量调节?答案是肯定的。

Wavemain.cpp中,音量调节程序如下:

    case WODM_GETVOLUME://获取喇叭音量

        {

            PULONG pdwGain = (PULONG)dwParam1;

 

            if (pStreamContext)

            {

                *pdwGain = pStreamContext->GetGain();

            }

            else

            {

                // Handle device gain in hardware

                //*pdwGain = g_pHWContext->GetOutputGain();//没有硬件音量调节支持

                // Handle device gain in software

                DeviceContext *pDeviceContext = g_pHWContext->GetOutputDeviceContext(uDeviceId);//软音量获取

                *pdwGain = pDeviceContext->GetGain();

            }

            dwRet = MMSYSERR_NOERROR;

            break;

        }

 </

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值