Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>For the master volume (for Vista and above), that would be:</p> <p><a href="http://msdn.microsoft.com/en-us/library/ms679141(VS.85).aspx" rel="noreferrer">ISimpleAudioVolume::SetMasterVolume</a></p> <p>As explained <a href="http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.mmedia/2007-01/msg00045.html" rel="noreferrer">here</a>, you may refer to the section:</p> <p><a href="http://msdn.microsoft.com/en-us/library/ms678710.aspx" rel="noreferrer">Core Audio APIs in Windows Vista</a> for more.</p> <p>This call is not a Media Foundation call but a WASAPI (Windows Audio Session API) call: ISimpleAudioVolume::SetMasterVolume (The SetMasterVolume method sets the master volume level for the audio session.)</p> <p>This may be difficult however to make the UI of the Media Center reflect the new sound level set by that call, as this <a href="http://discuss.mediacentersandbox.com/forums/thread/6758.aspx" rel="noreferrer">thread illustrates</a> it.</p> <p>For windows Xp, you can study this <a href="http://www.vbfrance.com/codes/AUGMENTER-BAISSER-VOLUME-WAVE-BALANCE_498.aspx" rel="noreferrer">script</a> and maybe <a href="http://www.tech-archive.net/Archive/VB/microsoft.public.vb.winapi/2005-07/msg00218.html" rel="noreferrer">this other script</a>.<br> <a href="http://www.codeproject.com/KB/audio-video/AudioLib.aspx" rel="noreferrer">Audio Library</a> might also be of interest.</p> <p>There is also this old <a href="http://www.codeguru.com/cpp/g-m/multimedia/article.php/c1575/" rel="noreferrer">Audio Project</a> which hasa master volume part:</p> <pre><code>BOOL CVolumeDlg::amdInitialize() { ASSERT(m_hMixer == NULL); // get the number of mixer devices present in the system m_nNumMixers = ::mixerGetNumDevs(); m_hMixer = NULL; ::ZeroMemory(&amp;m_mxcaps, sizeof(MIXERCAPS)); m_strDstLineName.Empty(); m_strVolumeControlName.Empty(); m_dwMinimum = 0; m_dwMaximum = 0; m_dwVolumeControlID = 0; // open the first mixer // A "mapper" for audio mixer devices does not currently exist. if (m_nNumMixers != 0) { if (::mixerOpen(&amp;m_hMixer, 0, reinterpret_cast&lt;DWORD&gt;(this-&gt;GetSafeHwnd()), NULL, MIXER_OBJECTF_MIXER | CALLBACK_WINDOW) != MMSYSERR_NOERROR) { return FALSE; } if (::mixerGetDevCaps(reinterpret_cast&lt;UINT&gt;(m_hMixer), &amp;m_mxcaps, sizeof(MIXERCAPS)) != MMSYSERR_NOERROR) { return FALSE; } } return TRUE; } BOOL CVolumeDlg::amdUninitialize() { BOOL bSucc = TRUE; if (m_hMixer != NULL) { bSucc = (::mixerClose(m_hMixer) == MMSYSERR_NOERROR); m_hMixer = NULL; } return bSucc; } BOOL CVolumeDlg::amdGetMasterVolumeControl() { if (m_hMixer == NULL) { return FALSE; } // get dwLineID MIXERLINE mxl; mxl.cbStruct = sizeof(MIXERLINE); mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; if (::mixerGetLineInfo(reinterpret_cast&lt;HMIXEROBJ&gt;(m_hMixer), &amp;mxl, MIXER_OBJECTF_HMIXER | MIXER_GETLINEINFOF_COMPONENTTYPE) != MMSYSERR_NOERROR) { return FALSE; } // get dwControlID MIXERCONTROL mxc; MIXERLINECONTROLS mxlc; mxlc.cbStruct = sizeof(MIXERLINECONTROLS); mxlc.dwLineID = mxl.dwLineID; mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME; mxlc.cControls = 1; mxlc.cbmxctrl = sizeof(MIXERCONTROL); mxlc.pamxctrl = &amp;mxc; if (::mixerGetLineControls(reinterpret_cast&lt;HMIXEROBJ&gt;(m_hMixer), &amp;mxlc, MIXER_OBJECTF_HMIXER | MIXER_GETLINECONTROLSF_ONEBYTYPE) != MMSYSERR_NOERROR) { return FALSE; } // store dwControlID m_strDstLineName = mxl.szName; m_strVolumeControlName = mxc.szName; m_dwMinimum = mxc.Bounds.dwMinimum; m_dwMaximum = mxc.Bounds.dwMaximum; m_dwVolumeControlID = mxc.dwControlID; return TRUE; } BOOL CVolumeDlg::amdGetMasterVolumeValue(DWORD &amp;dwVal) const { if (m_hMixer == NULL) { return FALSE; } MIXERCONTROLDETAILS_UNSIGNED mxcdVolume; MIXERCONTROLDETAILS mxcd; mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS); mxcd.dwControlID = m_dwVolumeControlID; mxcd.cChannels = 1; mxcd.cMultipleItems = 0; mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED); mxcd.paDetails = &amp;mxcdVolume; if (::mixerGetControlDetails(reinterpret_cast&lt;HMIXEROBJ&gt;(m_hMixer), &amp;mxcd, MIXER_OBJECTF_HMIXER | MIXER_GETCONTROLDETAILSF_VALUE) != MMSYSERR_NOERROR) { return FALSE; } dwVal = mxcdVolume.dwValue; return TRUE; } BOOL CVolumeDlg::amdSetMasterVolumeValue(DWORD dwVal) const { if (m_hMixer == NULL) { return FALSE; } MIXERCONTROLDETAILS_UNSIGNED mxcdVolume = { dwVal }; MIXERCONTROLDETAILS mxcd; mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS); mxcd.dwControlID = m_dwVolumeControlID; mxcd.cChannels = 1; mxcd.cMultipleItems = 0; mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED); mxcd.paDetails = &amp;mxcdVolume; if (::mixerSetControlDetails(reinterpret_cast&lt;HMIXEROBJ&gt;(m_hMixer), &amp;mxcd, MIXER_OBJECTF_HMIXER | MIXER_SETCONTROLDETAILSF_VALUE) != MMSYSERR_NOERROR) { return FALSE; } return TRUE; } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload