程序中如何代码实现声音音量的调节?
希望直接有原代码的小例子。

解决方案 »

  1.   

    // IVolume.h : IVolume interface definition.
    // Developer : Alex Chmut
    // Created : 8/11/98
    #pragma once
    #include <mmsystem.h>
    #pragma comment(lib,"winmm.lib")#include <mmreg.h>
    #include <msacm.h>
    #pragma comment(lib,"msacm32.lib")
    // User-defined callback for volume change notification
    typedef void (CALLBACK *PONMICVOULUMECHANGE)( DWORD dwCurrentVolume, DWORD dwUserValue );////////////////////////////////////////////////////////////////////////
    // IVolume interface
    class __declspec(novtable) IVolume
    {
    public:
    virtual bool IsAvailable() = 0;
    virtual void Enable() = 0;
    virtual void Disable() = 0; virtual DWORD GetVolumeMetric() = 0; virtual DWORD GetMinimalVolume() = 0;
    virtual DWORD GetMaximalVolume() = 0; virtual DWORD GetCurrentVolume() = 0;
    virtual void SetCurrentVolume( DWORD dwValue ) = 0; virtual void RegisterNotificationSink( PONMICVOULUMECHANGE, DWORD ) = 0;
    };
      

  2.   

    // VolumeOutMaster.h : Module interface declaration.
    // IVolume implementation for master audio volume
    // Developer : Alex Chmut
    // Created : 8/11/98
    #pragma once
    #include "IVolume.h"///////////////////////////////////////////////////////////////////////////////////////////////
    class CVolumeOutMaster
    : public IVolume
    {////////////////////////
    // IVolume interface
    public:
    virtual bool IsAvailable();
    virtual void Enable();
    virtual void Disable();
    virtual DWORD GetVolumeMetric();
    virtual DWORD GetMinimalVolume();
    virtual DWORD GetMaximalVolume();
    virtual DWORD GetCurrentVolume();
    virtual void SetCurrentVolume( DWORD dwValue );
    virtual void RegisterNotificationSink( PONMICVOULUMECHANGE, DWORD );public:
    CVolumeOutMaster();
    ~CVolumeOutMaster();private:
    bool Init();
    void Done(); bool Initialize();
    void EnableLine( bool bEnable = true );private:
    // Status Info
    bool m_bOK;
    bool m_bInitialized;
    bool m_bAvailable; // Mixer Info
    UINT m_uMixerID;
    DWORD m_dwMixerHandle; DWORD m_dwLineID;
    DWORD m_dwVolumeControlID;
    int m_nChannelCount;

    HWND m_hWnd;
    static LRESULT CALLBACK MixerWndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
    void OnControlChanged( DWORD dwControlID ); DWORD m_dwMinimalVolume;
    DWORD m_dwMaximalVolume;
    DWORD m_dwVolumeStep; // User Info
    PONMICVOULUMECHANGE m_pfUserSink;
    DWORD m_dwUserValue;
    };typedef CVolumeOutMaster* PCVolumeOutMaster;
    ///////////////////////////////////////////////////////////////////////////////////////////////
      

  3.   

    //////////////
    void CVolumeOutMaster::SetCurrentVolume( DWORD dwValue )
    {
    if ( !m_bAvailable || (dwValue<m_dwMinimalVolume) || (dwValue>m_dwMaximalVolume) )
    return;
    MIXERCONTROLDETAILS_UNSIGNED* aDetails = (MIXERCONTROLDETAILS_UNSIGNED*)malloc(m_nChannelCount*sizeof(MIXERCONTROLDETAILS_UNSIGNED));
    if ( !aDetails )
    return;
    for ( int i = 0; i < m_nChannelCount; i++ )
    {
    aDetails[i].dwValue = dwValue;
    }
    MIXERCONTROLDETAILS ControlDetails;
    memset( &ControlDetails, 0, sizeof(MIXERCONTROLDETAILS) );
    ControlDetails.cbStruct = sizeof(MIXERCONTROLDETAILS);
    ControlDetails.dwControlID = m_dwVolumeControlID;
    ControlDetails.cChannels = m_nChannelCount;
    ControlDetails.cMultipleItems = 0;
    ControlDetails.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
    ControlDetails.paDetails = &aDetails[0];
    MMRESULT mmResult = mixerSetControlDetails( (HMIXEROBJ)m_dwMixerHandle, &ControlDetails, MIXER_SETCONTROLDETAILSF_VALUE );
    free( aDetails );
    if ( mmResult != MMSYSERR_NOERROR )
    {
    TRACE(".MasterOutputVolume: FAILURE: Could not set volume(%d) mmResult=%d\n", dwValue, mmResult );
    }
    }
    因为帖不下了,只能帖这么多了。
      

  4.   

    和下面的几个函数相关,看看帮助
    mixerOpen
    mixerGetDevCaps
    mixerGetLineControls
    mixerGetControlDetails
    mixerSetControlDetails
      

  5.   

    Get full code from
    http://www.codeguru.com/Cpp/G-M/multimedia/article.php/c1569/
      

  6.   

    www.codeproject.com
    有控制系统音量,枚举混音设备,静音等的示例代码,需要可以发给你