www.pudn.com > dllDSPlayer1.rar > DSPlayer.h
// DSPlayer.h: interface for the CDSPlayer class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_DSPLAYER_H__E7C4CC7A_016F_48F9_80A1_1BA32303D7B5__INCLUDED_)
#define AFX_DSPLAYER_H__E7C4CC7A_016F_48F9_80A1_1BA32303D7B5__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/****************************************************************************************************************
投稿说明:
****************************************************************************************************************/
#define NOTE_CDSPlayer \
"\r\n\
◆◆◆ 《DirectShow多声卡播放器》◆◆◆\r\n\
一个用DirectShow开发的音频播放程序,支持多个声卡,可以任意指定播放声卡,可以播放mp3,wav,cda,avi,asf,wmv,mpg等所有\
windows支持的多媒体视频、音频文件,还可以直接播放CD。我已经封装好一个类,还有测试程序,源代码您可以直接使用。\r\n\
我刚接手做这个多声卡播放程序的时候也毫无头绪,我以前只用过wavOpenXXX()和mciSendXXX()系列API来播放音频\
文件,但是这些方法根本不支持多声卡,播放时的声音只能从系统默认的声卡中发出来,后来想到一个办法,在程序启动时将系统\
默认声卡改成我要播放的声卡,程序退出时再还原,可这样改来改去总会有问题。没办法,就到网上到处找资料,希望能得到指点,\
终于皇天不负有心人,我终于找到一个《多声卡SDK开发包》控件,我满心高兴地下载安装并试用,原来这是一个需要注册的控件,真是\
有违开源的思想啊,不就是一个多声卡播放程序,犯得着用来赚钱吗?你不开源也就得了,还弄个需要注册,不注册还不能用!\
实在没辙那就自己写好了。\r\n\
\r\n\
◆◆◆ 作者 ◆◆◆\r\n\
谢红伟 · chrys · chrys@163.com · http://ndxz.126.com\r\n\
\r\n\
◆◆◆ 日期 ◆◆◆\r\n\
2006-07-05 15:49:28"
// Filter graph notification to the specified window
#define WM_GRAPHNOTIFY (WM_USER+300)
#ifdef _DEBUG
#define _OPENTYPE "Media Files|*.mp3;*.wav;*.wma;*.cda;*.avi;*.asf;*.wmv;*.rmvb;*.rm;*.dat;*.mpg;*.mpeg|"
#else
#define _OPENTYPE "Music Files(*.mp3;*.wav;*.wma;*.cda)|*.mp3;*.wav;*.wma;*.cda|Video Files(*.avi;*.asf;*.wmv;*.rmvb;*.rm)|*.avi;*.asf;*.wmv;*.rmvb;*.rm|Mpeg Video Files(*.dat;*.mpg;*.mpeg)|*.dat;*.mpg;*.mpeg;*.mpe|All Files(*.*)|*.*|"
#endif
#define DRIVER_ROOT_LENGTH 2
class __declspec( dllexport ) CDSPlayer
{
private:
IGraphBuilder * mGraph;
IMediaControl * mMediaControl;
IMediaEventEx * mEvent;
IBasicVideo * mBasicVideo;
IBasicAudio * mBasicAudio;
IVideoWindow * mVideoWindow;
IMediaSeeking * mSeeking;
IBaseFilter * mAudioFilter;
ICreateDevEnum * m_pSysDevEnum;
DWORD mObjectTableEntry;
CStringArray m_StrAry_AudioDevice;
CPtrArray m_PtrAry_Filter_AudioDevice;
CString m_csMediaFileName;
CString m_csAudioDeviceName;
public:
CDSPlayer();
virtual ~CDSPlayer();
CString GetAudioDeviceName()
{
return m_csAudioDeviceName;
}
CString GetMediaFileName()
{
return m_csMediaFileName;
}
BOOL Delete_DefaultDirectSoundDevice();
public:
HWND m_hWndNotify, m_hWndDisplay;
BOOL SetAudioDevice ( CString strContainText, BOOL bInclude=TRUE, CString *pcsAudioDeviceFullName=NULL );
int FindAudioDeivceIDByName ( CString strContainText, BOOL bInclude, OUT CString *pcsAudioDeviceFullName=NULL);
void GetAudioDeviceList ( OUT CStringArray &StrAry_AudioDevice );
BOOL IsInitedOK();
virtual BOOL Create(void);
virtual void Release(void);
virtual BOOL Attach(IGraphBuilder * inGraphBuilder);
IGraphBuilder * GetGraph(void); // Not outstanding reference count
IMediaEventEx * GetEventHandle(void);
BOOL ConnectFilters(IPin * inOutputPin, IPin * inInputPin, const AM_MEDIA_TYPE * inMediaType = 0);
void DisconnectFilters(IPin * inOutputPin);
BOOL SetDisplayWindow(HWND inWindow);
BOOL SetNotifyWindow(HWND inWindow);
BOOL ResizeVideoWindow(long inLeft, long inTop, long inWidth, long inHeight);
void HandleEvent(WPARAM inWParam, LPARAM inLParam);
BOOL Run(void); // Control filter graph
BOOL Stop(void);
BOOL Pause(void);
BOOL IsRunning(void); // Filter graph status
BOOL IsStopped(void);
BOOL IsPaused(void);
BOOL SetFullScreen(BOOL inEnabled);
BOOL GetFullScreen(void);
// IMediaSeeking
BOOL GetCurrentPosition(double * outPosition);
BOOL GetStopPosition(double * outPosition);
BOOL SetCurrentPosition(double inPosition);
BOOL SetStartStopPosition(double inStart, double inStop);
BOOL GetDuration(double * outDuration);
BOOL SetPlaybackRate(double inRate);
// Attention: range from -10000 to 0, and 0 is FULL_VOLUME.
BOOL SetAudioVolume(long inVolume);
long GetAudioVolume(void);
// Attention: range from -10000(left) to 10000(right), and 0 is both.
BOOL SetAudioBalance(long inBalance);
long GetAudioBalance(void);
BOOL RenderFile(const char * inFile);
BOOL SnapshotBitmap(const char * outFile);
private:
BOOL EnumAudioDevice ();
IBaseFilter* FindFilters(const char *szFilterName);
void AddToObjectTable(void) ;
void RemoveFromObjectTable(void);
BOOL QueryInterfaces(void);
};
#endif // !defined(AFX_DSPLAYER_H__E7C4CC7A_016F_48F9_80A1_1BA32303D7B5__INCLUDED_)