開発環境 |
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