開発環境 Microsoft Visual C++ 2010 Express (SP1)
実行環境 Microsoft Windows XP Home Edition (SP3)
プロジェクトの種類 Win32 コンソール アプリケーション
プロジェクト名 mixer
アプリケーションの種類 コンソール アプリケーション
追加のオプション 空のプロジェクト

参考

mixer.c
#pragma comment(lib, "winmm.lib")
 
#include <locale.h>
#include <stdio.h>
#include <Windows.h>
 
int main()
{
	UINT uNumDevs;
	UINT uMxId;
	HMIXER hmx;
	MIXERCAPS mxcaps;
	MIXERLINE mxl;
	MIXERCONTROL mxctrl;
	MIXERLINECONTROLS mxlc;
	MIXERCONTROLDETAILS mxcd;
	MIXERCONTROLDETAILS_UNSIGNED mxcdVolume;
	MMRESULT mr;
 
	_wsetlocale(LC_CTYPE, L"");
 
	// ミキサーデバイスの数
	uNumDevs = mixerGetNumDevs();
 
	wprintf(L"uNumDevs=[%u]\n", uNumDevs);
 
	for (uMxId = 0; uMxId < uNumDevs; uMxId++) {
 
		wprintf(L"uMxId=[%u]\n", uMxId);
 
		// ミキサーデバイス能力
		mr = mixerGetDevCaps(uMxId, &mxcaps, sizeof (MIXERCAPS));
 
		wprintf(L"mxcaps.szPname=[%s]\n", mxcaps.szPname);
		wprintf(L"mxcaps.cDestinations=[%u]\n", mxcaps.cDestinations);
 
		// ミキサーデバイス
		mr = mixerOpen(&hmx, uMxId, (DWORD_PTR)NULL, 0, MIXER_OBJECTF_MIXER);
		if (mr != MMSYSERR_NOERROR) {
			return 1;
		}
 
		// スピーカー
		mxl.cbStruct		= sizeof (MIXERLINE);
		mxl.dwComponentType	= MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
		mr = mixerGetLineInfo((HMIXEROBJ)hmx, &mxl,
			MIXER_OBJECTF_HMIXER | MIXER_GETLINEINFOF_COMPONENTTYPE);
 
		wprintf(L"mxl.dwLineID=[%x]\n", mxl.dwLineID);
		wprintf(L"mxl.dwComponentType=[%u]\n", mxl.dwComponentType);
		wprintf(L"mxl.cChannels=[%u]\n", mxl.cChannels);
		wprintf(L"mxl.cConnections=[%u]\n", mxl.cConnections);
		wprintf(L"mxl.cControls=[%u]\n", mxl.cControls);
		wprintf(L"mxl.szName=[%s]\n", mxl.szName);
 
		// マスターボリュームID
		mxlc.cbStruct		= sizeof (MIXERLINECONTROLS);
		mxlc.dwLineID		= mxl.dwLineID;
		mxlc.dwControlType	= MIXERCONTROL_CONTROLTYPE_VOLUME;
		mxlc.cControls		= 1;
		mxlc.cbmxctrl		= sizeof (MIXERCONTROL);
		mxlc.pamxctrl		= &mxctrl;
		mr = mixerGetLineControls((HMIXEROBJ)hmx, &mxlc,
			MIXER_OBJECTF_HMIXER | MIXER_GETLINECONTROLSF_ONEBYTYPE);
 
		wprintf(L"mxctrl.szName=[%s]\n", mxctrl.szName);
		wprintf(L"mxctrl.Bounds.dwMinimum=[%u]\n", mxctrl.Bounds.dwMinimum);
		wprintf(L"mxctrl.Bounds.dwMaximum=[%u]\n", mxctrl.Bounds.dwMaximum);
		wprintf(L"mxctrl.dwControlID=[%u]\n", mxctrl.dwControlID);
 
		// 現在の音量
		mxcd.cbStruct		= sizeof (MIXERCONTROLDETAILS);
		mxcd.dwControlID	= mxctrl.dwControlID;
		mxcd.cChannels		= 1;
		mxcd.cMultipleItems	= 0;
		mxcd.cbDetails		= sizeof (MIXERCONTROLDETAILS_UNSIGNED);
		mxcd.paDetails		= &mxcdVolume;
		mr = mixerGetControlDetails((HMIXEROBJ)hmx, &mxcd,
			MIXER_OBJECTF_HMIXER | MIXER_GETCONTROLDETAILSF_VALUE);
 
		wprintf(L"mxcdVolume.dwValue=[%u]\n", mxcdVolume.dwValue);
 
		mr = mixerClose(hmx);
	}
	return 0;
}
 

出力
uNumDevs=[2]
uMxId=[0]
mxcaps.szPname=[SB X-Fi Audio [BC00]]
mxcaps.cDestinations=[2]
mxl.dwLineID=[ffff0000]
mxl.dwComponentType=[4]
mxl.cChannels=[8]
mxl.cConnections=[8]
mxl.cControls=[4]
mxl.szName=[プレイ コントロール]
mxctrl.szName=[音量]
mxctrl.Bounds.dwMinimum=[0]
mxctrl.Bounds.dwMaximum=[65535]
mxctrl.dwControlID=[1]
mxcdVolume.dwValue=[65535]
uMxId=[1]
mxcaps.szPname=[SoundMAX HD Audio]
mxcaps.cDestinations=[3]
mxl.dwLineID=[ffff0000]
mxl.dwComponentType=[4]
mxl.cChannels=[8]
mxl.cConnections=[9]
mxl.cControls=[4]
mxl.szName=[マスタ音量]
mxctrl.szName=[マスタ音量]
mxctrl.Bounds.dwMinimum=[0]
mxctrl.Bounds.dwMaximum=[65535]
mxctrl.dwControlID=[1]
mxcdVolume.dwValue=[32845]
最終更新:2012年10月02日 20:50