程序中如何代码实现声音音量的调节?
希望直接有原代码的小例子。
希望直接有原代码的小例子。
解决方案 »
- 请教:对话框中如何实现画布?
- VC下如何改变picture控件的背景色
- 如何给结构分配内存?
- 麻烦,如何编写一个代理程序?
- ●●●●●●●●●●急急急急急急急急急急急急●●●●●●●●●●UP有分,分不够可再加
- 请教:什么是callback?怎么用的?
- 大家好!急问:在mfc中如何监控某个按钮控件被按下?(100)
- 我的一个在installshield for vc6.0下制作的安装程序用installshield professional 6.1编译时出错
- 如何截获其他程序发出的消息报 ?
- MFC WM_SETTEXT
- 串口通信问题 !!!
- CMainFrame中我这样分割窗口为何没有反映,重新刷新会出错,代码时。。
// 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;
};
// 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;
///////////////////////////////////////////////////////////////////////////////////////////////
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 );
}
}
因为帖不下了,只能帖这么多了。
mixerOpen
mixerGetDevCaps
mixerGetLineControls
mixerGetControlDetails
mixerSetControlDetails
http://www.codeguru.com/Cpp/G-M/multimedia/article.php/c1569/
有控制系统音量,枚举混音设备,静音等的示例代码,需要可以发给你