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(); } } |