Click here to Skip to main content
15,892,005 members
Articles / Desktop Programming / Win32

Windows Audio Mixer API Wrapper Library

Rate me:
Please Sign up or sign in to vote.
4.11/5 (12 votes)
20 Oct 2008CPOL5 min read 122.6K   5K   27  
A small wrapper library to programmatically interact with standard audio controls
// -----------------------------------------------------------------------------
// ControlsDialog.cpp : implementation file
//
//  Copyright (C) 2008 Peter C. Studt
//
//  This software is provided 'as-is', without any express or implied
//  warranty.  In no event will the author be held liable for any damages
//  arising from the use of this software. It can be redistributed and/or 
//  modified under the terms of The Code Project Open License (CPOL)
//
// -----------------------------------------------------------------------------

#include "stdafx.h"
#include "ControlsDialog.h"

// -----------------------------------------------------------------------------
// CControlsDialog dialog

IMPLEMENT_DYNAMIC(CControlsDialog, CDialog)

// -----------------------------------------------------------------------------
CControlsDialog::CControlsDialog(CWnd* pParent /*=NULL*/)
	: CDialog(CControlsDialog::IDD, pParent)
{
}

// -----------------------------------------------------------------------------
CControlsDialog::~CControlsDialog()
{
}

// -----------------------------------------------------------------------------
void CControlsDialog::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);

	DDX_Text(pDX, IDC_STATIC_CONTROL_ID       , mdwControlID		 );
	DDX_Text(pDX, IDC_STATIC_CS_CT            , mdwControlType		 );
	DDX_Text(pDX, IDC_STATIC_CS_CT_CLASS      , mcsControlType_Class );
	DDX_Text(pDX, IDC_STATIC_CS_CT_TYPE       , mcsControlType_Type	 );
	DDX_Text(pDX, IDC_STATIC_CS_FDW_CONTROL   , mcsFdwControl		 );
	DDX_Text(pDX, IDC_STATIC_CS_DISABLED      , mcsFwdControl_Dis	 );
	DDX_Text(pDX, IDC_STATIC_CS_MULTIPLE      , mcsFwdControl_Mult	 );
	DDX_Text(pDX, IDC_STATIC_CS_UNIFORM       , mcsFwdControl_Unif	 );
	DDX_Text(pDX, IDC_STATIC_CS_MULTIPLE_ITEMS, mcMultipleItems		 );
	DDX_Text(pDX, IDC_STATIC_CS_SZ_SHORT_NAME , mszShortName		 );
	DDX_Text(pDX, IDC_STATIC_CS_SZ_NAME		  , mszName				 );
	DDX_Text(pDX, IDC_STATIC_BOUNDS_MIN		  , mBoundsMin			 );
	DDX_Text(pDX, IDC_STATIC_BOUNDS_MAX		  , mBoundsMax			 );
	DDX_Text(pDX, IDC_STATIC_METRICS		  , mMetrics			 );
}

// -----------------------------------------------------------------------------
void CControlsDialog::SetDisplayValues( MIXERCONTROL* sMcData )
{
	memcpy( (void*)&mMixerControl, (void*)sMcData, sizeof(MIXERCONTROL) ) ;

	mdwControlID = mMixerControl.dwControlID ;
	mcMultipleItems = mMixerControl.cMultipleItems ;
	mszShortName = mMixerControl.szShortName ;
	mszName = mMixerControl.szName ;
	mBoundsMin = mMixerControl.Bounds.dwMinimum ;
	mBoundsMax = mMixerControl.Bounds.dwMaximum ;
	mMetrics = mMixerControl.Metrics.cSteps ;
	
	SetCustomDlgData() ;
	UpdateData(FALSE) ;
}

// -----------------------------------------------------------------------------
// Format custom MIXERCONTROL data as required
void CControlsDialog::SetCustomDlgData()
{
	CString s1 ;
	DWORD dwCt ;
	DWORD dwFwd ;

	mcsFdwControl.Format( _T("0x%x"), mMixerControl.fdwControl ) ;
	dwFwd = mMixerControl.fdwControl ;

	switch( dwFwd ) 
	{
		case MIXERCONTROL_CONTROLF_UNIFORM  : s1 = _T("MIXERCONTROL_CONTROLF_UNIFORM ") ; break ; 
		case MIXERCONTROL_CONTROLF_MULTIPLE : s1 = _T("MIXERCONTROL_CONTROLF_MULTIPLE") ; break ; 
		case MIXERCONTROL_CONTROLF_DISABLED : s1 = _T("MIXERCONTROL_CONTROLF_DISABLED") ; break ; 	
		default: 
			s1 = _T("Undefined fdwControl value") ;
	}
	mcsFwdControl_Dis.Format(	_T("%s"), s1 ) ; 

	mdwControlType.Format( _T("0x%x"), mMixerControl.dwControlType ) ;

	// Set the Class value for the Control Type
	dwCt = mMixerControl.dwControlType & MIXERCONTROL_CT_CLASS_MASK ;
	switch( dwCt )
	{
		case MIXERCONTROL_CT_CLASS_TIME   : s1 = _T("MIXERCONTROL_CT_CLASS_TIME  ") ; break ; 
		case MIXERCONTROL_CT_CLASS_CUSTOM : s1 = _T("MIXERCONTROL_CT_CLASS_CUSTOM") ; break ; 
		case MIXERCONTROL_CT_CLASS_METER  : s1 = _T("MIXERCONTROL_CT_CLASS_METER ") ; break ; 
		case MIXERCONTROL_CT_CLASS_SWITCH : s1 = _T("MIXERCONTROL_CT_CLASS_SWITCH") ; break ; 
		case MIXERCONTROL_CT_CLASS_NUMBER : s1 = _T("MIXERCONTROL_CT_CLASS_NUMBER") ; break ; 
		case MIXERCONTROL_CT_CLASS_SLIDER : s1 = _T("MIXERCONTROL_CT_CLASS_SLIDER") ; break ; 
		case MIXERCONTROL_CT_CLASS_FADER  : s1 = _T("MIXERCONTROL_CT_CLASS_FADER ") ; break ; 
		case MIXERCONTROL_CT_CLASS_LIST   : s1 = _T("MIXERCONTROL_CT_CLASS_LIST  ") ; break ; 
		default: 
			s1 = _T("Undefined Class") ;
	}
	mcsControlType_Class = s1 ;

	// Set the Type value for the Control Type
	dwCt = mMixerControl.dwControlType ;
	switch( dwCt )
	{
		case MIXERCONTROL_CONTROLTYPE_BASS			 : s1 = _T("MIXERCONTROL_CONTROLTYPE_BASS") ; break ; 
		case MIXERCONTROL_CONTROLTYPE_EQUALIZER		 : s1 = _T("MIXERCONTROL_CONTROLTYPE_EQUALIZER") ; break ;
		case MIXERCONTROL_CONTROLTYPE_FADER			 : s1 = _T("MIXERCONTROL_CONTROLTYPE_FADER") ; break ;
		case MIXERCONTROL_CONTROLTYPE_TREBLE		 : s1 = _T("MIXERCONTROL_CONTROLTYPE_TREBLE") ; break ;
		case MIXERCONTROL_CONTROLTYPE_VOLUME		 : s1 = _T("MIXERCONTROL_CONTROLTYPE_VOLUME") ; break ;
		case MIXERCONTROL_CONTROLTYPE_MIXER			 : s1 = _T("MIXERCONTROL_CONTROLTYPE_MIXER") ; break ;
		case MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT : s1 = _T("MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT") ; break ;
		case MIXERCONTROL_CONTROLTYPE_MUX			 : s1 = _T("MIXERCONTROL_CONTROLTYPE_MUX") ; break ;
		case MIXERCONTROL_CONTROLTYPE_SINGLESELECT	 : s1 = _T("MIXERCONTROL_CONTROLTYPE_SINGLESELECT") ; break ;
		case MIXERCONTROL_CONTROLTYPE_BOOLEANMETER	 : s1 = _T("MIXERCONTROL_CONTROLTYPE_BOOLEANMETER") ; break ;
		case MIXERCONTROL_CONTROLTYPE_PEAKMETER		 : s1 = _T("MIXERCONTROL_CONTROLTYPE_PEAKMETER") ; break ;
		case MIXERCONTROL_CONTROLTYPE_SIGNEDMETER	 : s1 = _T("MIXERCONTROL_CONTROLTYPE_SIGNEDMETER") ; break ;
		case MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER	 : s1 = _T("MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER") ; break ;
		case MIXERCONTROL_CONTROLTYPE_DECIBELS		 : s1 = _T("MIXERCONTROL_CONTROLTYPE_DECIBELS") ; break ;
		case MIXERCONTROL_CONTROLTYPE_PERCENT		 : s1 = _T("MIXERCONTROL_CONTROLTYPE_PERCENT") ; break ;
		case MIXERCONTROL_CONTROLTYPE_SIGNED		 : s1 = _T("MIXERCONTROL_CONTROLTYPE_SIGNED") ; break ;
		case MIXERCONTROL_CONTROLTYPE_UNSIGNED		 : s1 = _T("MIXERCONTROL_CONTROLTYPE_UNSIGNED") ; break ;
		case MIXERCONTROL_CONTROLTYPE_PAN			 : s1 = _T("MIXERCONTROL_CONTROLTYPE_PAN") ; break ;
		case MIXERCONTROL_CONTROLTYPE_QSOUNDPAN		 : s1 = _T("MIXERCONTROL_CONTROLTYPE_QSOUNDPAN") ; break ;
		case MIXERCONTROL_CONTROLTYPE_SLIDER		 : s1 = _T("MIXERCONTROL_CONTROLTYPE_SLIDER") ; break ;
		case MIXERCONTROL_CONTROLTYPE_BOOLEAN		 : s1 = _T("MIXERCONTROL_CONTROLTYPE_BOOLEAN") ; break ;
		case MIXERCONTROL_CONTROLTYPE_BUTTON		 : s1 = _T("MIXERCONTROL_CONTROLTYPE_BUTTON") ; break ;
		case MIXERCONTROL_CONTROLTYPE_LOUDNESS		 : s1 = _T("MIXERCONTROL_CONTROLTYPE_LOUDNESS") ; break ;
		case MIXERCONTROL_CONTROLTYPE_MONO			 : s1 = _T("MIXERCONTROL_CONTROLTYPE_MONO") ; break ;
		case MIXERCONTROL_CONTROLTYPE_MUTE			 : s1 = _T("MIXERCONTROL_CONTROLTYPE_MUTE") ; break ;
		case MIXERCONTROL_CONTROLTYPE_ONOFF			 : s1 = _T("MIXERCONTROL_CONTROLTYPE_ONOFF") ; break ;
		case MIXERCONTROL_CONTROLTYPE_STEREOENH		 : s1 = _T("MIXERCONTROL_CONTROLTYPE_STEREOENH") ; break ;
		case MIXERCONTROL_CONTROLTYPE_MICROTIME		 : s1 = _T("MIXERCONTROL_CONTROLTYPE_MICROTIME") ; break ;
		case MIXERCONTROL_CONTROLTYPE_MILLITIME		 : s1 = _T("MIXERCONTROL_CONTROLTYPE_MILLITIME") ; break ;
		case MIXERCONTROL_CONTROLTYPE_CUSTOM		 : s1 = _T("MIXERCONTROL_CONTROLTYPE_CUSTOM") ; break ;
		default: 
			s1 = _T("Undefined Type") ;	
	}
	mcsControlType_Type = s1 ;							
}

// -----------------------------------------------------------------------------

BEGIN_MESSAGE_MAP(CControlsDialog, CDialog)
END_MESSAGE_MAP()

// -----------------------------------------------------------------------------
// CControlsDialog message handlers

// -----------------------------------------------------------------------------
void CControlsDialog::SetTitle(CString csTitle)
{
	SetWindowText( csTitle ) ;
}

// -----------------------------------------------------------------------------

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions