音量(パンポット)はmidiOutSetVolumeを使えばあっという間に設定できるのですが、
これだとミュートチェックは外してくれません。

というわけでこちら(http://www.terra.dti.ne.jp/~vivas/delphi/mixerapi.html)のサイト様の説明を参考にさせて頂きながらミキサーAPIを使ってミュートを解除するコードを書いてみました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
MIXERLINE MixerLine = {sizeof(MIXERLINE)};
MixerLine.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
if (mixerGetLineInfo((HMIXEROBJ)nDevID, &MixerLine, MIXER_GETLINEINFOF_COMPONENTTYPE | MIXER_OBJECTF_MIDIOUT) == MMSYSERR_NOERROR) {
    MIXERCONTROL Ctrl;
    MIXERLINECONTROLS Ctrls = {sizeof(MIXERLINECONTROLS), MixerLine.dwLineID};
    Ctrls.cControls = 1;
    Ctrls.dwControlType = MIXERCONTROL_CONTROLTYPE_MUTE;
    Ctrls.cbmxctrl = sizeof(MIXERCONTROL);
    Ctrls.pamxctrl = &Ctrl;
    if (mixerGetLineControls((HMIXEROBJ)nDevID, &Ctrls, MIXER_GETLINECONTROLSF_ONEBYTYPE | MIXER_OBJECTF_MIDIOUT) == MMSYSERR_NOERROR) {
        MIXERCONTROLDETAILS Details = {sizeof(MIXERCONTROLDETAILS)};
        Details.dwControlID = Ctrl.dwControlID;
        Details.cChannels = 1;  // 決めうちで良いらしい
        MIXERCONTROLDETAILS_BOOLEAN Boolean = {0};
        Details.paDetails = &Boolean;
        Details.cbDetails = sizeof(MIXERCONTROLDETAILS_BOOLEAN);
        if (mixerSetControlDetails((HMIXEROBJ)nDevID, &Details, MIXER_SETCONTROLDETAILSF_VALUE | MIXER_OBJECTF_MIDIOUT) == MMSYSERR_NOERROR) {
            // 成功
        }
    }
}

この制御をDominoに組み込めば「音が鳴らない!」と助けを求める方が激減する予感。

記事検索

アーカイブ