Ignore:
Timestamp:
May 28, 2002, 7:10:02 PM (23 years ago)
Author:
sandervl
Message:

Support added for master volume (ioctl90 mode)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/winmm/mixeros2.cpp

    r8506 r8510  
    1 /* $Id: mixeros2.cpp,v 1.6 2002-05-28 13:35:02 sandervl Exp $ */
     1/* $Id: mixeros2.cpp,v 1.7 2002-05-28 17:10:02 sandervl Exp $ */
    22
    33/*
     
    2626#include "mixeros2.h"
    2727
     28#ifndef LOWORD
     29#define LOWORD(a)   (a & 0xffff)
     30#endif
     31
    2832static BOOL  GetAudioPDDName (char *pszPDDName);
    2933static HFILE DevOpen (char *ddName);
     
    5862
    5963    memset(szVolumeLevels, -1, sizeof(szVolumeLevels));
     64
     65    //query current master volume
     66    MCI_MASTERAUDIO_PARMS parms = {0};
     67    APIRET                rc;
     68
     69    rc = mymciSendCommand(0, MCI_MASTERAUDIO, MCI_MASTERVOL | MCI_WAIT | MCI_QUERYCURRENTSETTING, &parms, 0);
     70    if(LOWORD(rc) == MCIERR_SUCCESS)
     71    {
     72        dprintf(("Current master volume %d -> %d", parms.ulReturn, MMPM2MASTER_TO_WIN32_VOLUME(parms.ulReturn)));
     73        szVolumeLevels[MIX_CTRL_VOL_OUT_LINE][0]  = MMPM2MASTER_TO_WIN32_VOLUME(parms.ulReturn);
     74        szVolumeLevels[MIX_CTRL_VOL_OUT_LINE][1]  = szVolumeLevels[MIX_CTRL_VOL_OUT_LINE][0];
     75        szVolumeLevels[MIX_CTRL_MUTE_OUT_LINE][0] = (szVolumeLevels[MIX_CTRL_MUTE_OUT_LINE][0] == 0);
     76    }
     77    else {
     78        char szError[256] = "";
     79
     80        mymciGetErrorString(rc, szError, sizeof(szError));
     81        dprintf(("mciSendCommand returned error %x = %s", rc, szError));
     82    }
    6083    return TRUE;
    6184}
     
    140163
    141164    idx = OSLibMixGetIndex(dwControl);
    142     if(idx == -1) {
     165    if(idx == -1) {             
    143166        return FALSE;
    144167    }
     
    153176    MIXSTRUCT mixstruct;
    154177
    155     //TODO: implement master volume with MMPM2
    156     if(dwControl == MIX_CTRL_VOL_OUT_LINE) {
     178    if(dwControl > MIX_CTRL_MAX) {
     179        DebugInt3();
     180        return FALSE;
     181    }
     182    if(dwVolLeft > MIXER_WIN32_MAX_VOLUME || dwVolRight > MIXER_WIN32_MAX_VOLUME) {
     183        dprintf(("OSLibMixSetVolume: Volume (%d,%d) out of RANGE!!", dwVolLeft, dwVolRight));
     184        return FALSE;
     185    }
     186
     187    szVolumeLevels[dwControl][0] = dwVolLeft;
     188    szVolumeLevels[dwControl][1] = dwVolRight;
     189   
     190    //Master volume/mute can't be controlled with ioctl90
     191    if(dwControl == MIX_CTRL_VOL_OUT_LINE)
     192    {
     193        MCI_MASTERAUDIO_PARMS parms;
     194
     195        if(szVolumeLevels[MIX_CTRL_MUTE_OUT_LINE][0] == TRUE) {
     196            //muted, ignore
     197            return TRUE;
     198        }
     199        memset(&parms, 0, sizeof(parms));
     200        parms.ulMasterVolume = WIN32_TO_MMPM2MASTER_VOLUME(szVolumeLevels[dwControl][0]);
     201
     202        mymciSendCommand(0, MCI_MASTERAUDIO, MCI_MASTERVOL | MCI_WAIT, &parms, 0);
     203
    157204        return TRUE;
    158205    }
    159206
    160     //wave in recording levels are virtual controls as there is only
    161     //one control for recording gain
    162     switch(dwControl) {
    163     case MIX_CTRL_VOL_IN_W_MONO:
    164     case MIX_CTRL_VOL_IN_W_PHONE:
    165     case MIX_CTRL_VOL_IN_W_MIC:
    166     case MIX_CTRL_VOL_IN_W_LINE:
    167     case MIX_CTRL_VOL_IN_W_CD:
    168     case MIX_CTRL_VOL_IN_W_VIDEO:
    169     case MIX_CTRL_VOL_IN_W_AUX:
    170     case MIX_CTRL_VOL_IN_W_PCM:
    171         szVolumeLevels[dwControl][0] = dwVolLeft;
    172         szVolumeLevels[dwControl][1] = dwVolRight;
    173         break;
    174     }
    175207    dwFunc = OSLibMixGetIndex(dwControl);
    176208    if(dwFunc == -1) {
     
    184216    }
    185217
    186     if(dwVolLeft > MIXER_WIN32_MAX_VOLUME || dwVolRight > MIXER_WIN32_MAX_VOLUME) {
    187         dprintf(("OSLibMixSetVolume: Volume (%d,%d) out of RANGE!!", dwVolLeft, dwVolRight));
    188         return FALSE;
    189     }
    190218    if(dwControl == MIX_CTRL_OUT_L_TREBLE) {
    191219        //get bass value (right = treble, left = bass)
     
    223251    MIXSTRUCT mixstruct;
    224252
    225     //TODO: implement master volume with MMPM2
     253    if(dwControl > MIX_CTRL_MAX) {
     254        DebugInt3();
     255        return FALSE;
     256    }
     257    szVolumeLevels[dwControl][0] = fMute;
     258
     259    //Master volume/mute can't be controlled with ioctl90
    226260    if(dwControl == MIX_CTRL_MUTE_OUT_LINE) {
     261        MCI_MASTERAUDIO_PARMS parms;
     262
     263        memset(&parms, 0, sizeof(parms));
     264        parms.ulMasterVolume = (fMute) ? 0 : MMPM2MASTER_TO_WIN32_VOLUME(szVolumeLevels[MIX_CTRL_VOL_OUT_LINE][0]);
     265
     266        mymciSendCommand(0, MCI_MASTERAUDIO, MCI_MASTERVOL | MCI_WAIT, &parms, 0);
     267
    227268        return TRUE;
    228269    }
     
    259300    MIXSTRUCT mixstruct;
    260301
    261     //TODO: implement master volume with MMPM2
    262     if(dwControl == MIX_CTRL_VOL_OUT_LINE) {
    263         if(pdwVolLeft)  *pdwVolLeft  = 50000;
    264         if(pdwVolRight) *pdwVolRight = 50000;
     302    //Master volume/mute can't be controlled with ioctl90
     303    if(dwControl == MIX_CTRL_VOL_OUT_LINE)
     304    {
     305        if(pdwVolLeft)  *pdwVolLeft  = szVolumeLevels[MIX_CTRL_VOL_OUT_LINE][0];
     306        if(pdwVolRight) *pdwVolRight = szVolumeLevels[MIX_CTRL_VOL_OUT_LINE][1];
     307
    265308        return TRUE;
    266309    }
     
    324367    MIXSTRUCT mixstruct;
    325368
    326     //TODO: implement master volume with MMPM2
    327     if(dwControl == MIX_CTRL_MUTE_OUT_LINE) {
    328         if(pfMute)      *pfMute      = 0;
     369    //Master volume/mute can't be controlled with ioctl90
     370    if(dwControl == MIX_CTRL_MUTE_OUT_LINE)
     371    {
     372        if(pfMute) *pfMute = szVolumeLevels[MIX_CTRL_MUTE_OUT_LINE][0];
     373
    329374        return TRUE;
    330375    }
     376
    331377    dwFunc = OSLibMixGetIndex(dwControl);
    332378    if(dwFunc == -1) {
Note: See TracChangeset for help on using the changeset viewer.