| 
 1、Sound.cpp 
#include ".\sound.h" 
Sound::Sound() {  m_pGraph = NULL;  m_pMediaControl = NULL;  m_pMediaPosition = NULL;  volume = -1000; 
 CoInitialize(NULL);  CoCreateInstance(CLSID_FilterGraph, NULL,                      CLSCTX_INPROC, IID_IGraphBuilder, (void**)&m_pGraph); 
 m_pGraph->QueryInterface(IID_IMediaControl, (void**)&m_pMediaControl); 
 m_pGraph->QueryInterface(IID_IMediaPosition, (void**)&m_pMediaPosition); 
 m_enumFormat = MP3; } 
Sound::~Sound(void) {  SafeRelease(m_pGraph);  SafeRelease(m_pMediaControl);  SafeRelease(m_pMediaPosition);  CoUninitialize(); } 
void Sound: oadSound(const char* szSoundFileName) {  WCHAR wstrSoundPath[MAX_PATH];  CHAR strSoundPath[MAX_PATH]; 
 GetCurrentDirectory(MAX_PATH, strSoundPath);  strcat(strSoundPath, "\\music\\");    // 此为文件夹名称  strcat(strSoundPath, szSoundFileName); 
 MultiByteToWideChar(CP_ACP, 0, strSoundPath, -1, wstrSoundPath, MAX_PATH); 
 m_pGraph->RenderFile(wstrSoundPath, NULL); } 
// 开始播放 void Sound: lay() {  m_pMediaPosition->put_CurrentPosition(0);  m_pMediaControl->Run(); } 
//播放停止 
void Sound::Stop() {  m_pMediaControl->Stop(); } 
// 播放测试,是否到达尾部 
bool Sound::IsPlaying() {  REFTIME refPosition;  REFTIME refDuration; 
 m_pMediaPosition->get_CurrentPosition(&refPosition);  m_pMediaPosition->get_Duration(&refDuration);      if(refPosition < refDuration)  {   return true;  }  else  {   return false;  } } 
2、sound.h 
#pragma once #include "header.h" #include <dshow.h> #include <dsound.h> #include <dmusici.h> 
#pragma comment (lib,"Strmiids.lib") #pragma comment (lib,"Quartz.lib") 
#define SafeRelease(pInterface) if(pInterface != NULL) {pInterface->Release(); pInterface=NULL;} #define SafeDelete(pObject) if(pObject != NULL) {delete pObject; pObject=NULL;} 
class Sound { public:  enum Format {Unknown, MP3, WavMidi};  WCHAR wstrSoundPath[MAX_PATH];  CHAR  strSoundPath[MAX_PATH];  IGraphBuilder* m_pGraph;  IMediaControl* m_pMediaControl;  IMediaPosition* m_pMediaPosition;  LPDIRECTSOUNDBUFFER pSBuf;  Format m_enumFormat;  int m_dwFrames; 
public:  Sound();  ~Sound(void);  void LoadSound(const char* szSoundFileName);  void Play();  void Stop();  bool IsPlaying(); };
  
3、调用方法 
   // 循环播放音乐    if(m_dwFrames == 1)    {     m_Sound->LoadSound("xiuyou.mp3");   // 加载音乐     m_Sound-> lay();    }    else if(m_dwFrames > 1)    {     if(!m_Sound->IsPlaying())     {      m_Sound->LoadSound("xiuyou.mp3");     // 加载音乐      m_Sound-> lay();     }    }  |