c++进行音频管理

最近做VR开发时需要对麦克风分的录音进行操作,其中涉及到调节录音的大小,检测录音的的大小等功能,我主要使用c++调用windows的音频相关的api来进行对录音的操作,在这里记录一下。

对音频的控制主要用到mixer相关的函数,与它相关的函数主要有以下几个

mixerOpen和mixerClose函数用来打开和关闭混音器设备

mixerGetNumDevs可以确定系统中有多少混音器设备

mixerGetDevCaps函数可以确定混音器设备的能力

mixerGetLineInfo可以检索指定音频线路的信息

mixerGetLineControls用于检索一个或者多个与音频线路相关的控制的通用信息

mixerGetControlDetails用于检索与某个音频线路相关的一个控制的属性

mixerSetControlDetails用于设置制定控制的属性。

  
现在在来看看如何对麦克风录入音量大小的控制

想要控制麦克风录入音量的大小,主要包括以下几个步骤

①遍历打开系统的混音器,直到找到麦克风的混音器,记录该设备ID

②根据取得的设备ID,取得音频线路相关的通用信息

③根据上面取得的音频线路相关的通用信息取得或者设定该音频线路的控制

具体的取得和控制麦克风设置音量的代码如下

int setAudioInputVolumn(DWORD dwVolume)
{
    //初始化相关结构体
    MMRESULT          rc;
    HMIXER            hMixer;
    MIXERLINE         mxl;
    MIXERLINECONTROLS mxlc;
    MIXERCONTROL      mxc;

    //①遍历系统的混音器,直到找到麦克风的混音器,记录该设备ID
    for (int deviceID = 0; true; deviceID++)
    {
        //打开当前的混音器,deviceID为混音器的id
        rc = mixerOpen(&hMixer, deviceID, 0, 0, MIXER_OBJECTF_MIXER);

        if (MMSYSERR_NOERROR != rc)
        {
            break;
        }

        ZeroMemory(&mxl, sizeof(MIXERLINE));

        mxl.cbStruct = sizeof(MIXERLINE);
        /* 指出需要获取的通道,
        声卡的音频输出用MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
        声卡的音频输入用MIXERLINE_COMPONENTTYPE_DST_WAVEIN
        */
        mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN;
        // 取得混合器设备的指定线路信息
        rc = mixerGetLineInfo((HMIXEROBJ)hMixer, &mxl, MIXER_OBJECTF_HMIXER | MIXER_GETLINEINFOF_COMPONENTTYPE);
        if (rc != MMSYSERR_NOERROR)
        {
            continue;
        }

        // 取得混合器设备的指定线路信息成功的话,则将连接数保存 
        DWORD   dwConnections = mxl.cConnections;
        DWORD   dwLineID = -1;
        for (DWORD i = 0; i<dwConnections;)
        {
            mxl.dwSource = i;

            
  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值