音量(パンポット)はmidiOutSetVolumeを使えばあっという間に設定できるのですが、
これだとミュートチェックは外してくれません。
というわけでこちら(http://www.terra.dti.ne.jp/~vivas/delphi/mixerapi.html)のサイト様の説明を参考にさせて頂きながらミキサーAPIを使ってミュートを解除するコードを書いてみました。
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に組み込めば「音が鳴らない!」と助けを求める方が激減する予感。