Music.cpp
资源名称:3DRPG.rar [点击查看]
上传用户:cjwanglu
上传日期:2013-07-10
资源大小:4744k
文件大小:3k
源码类别:
游戏
开发平台:
Visual C++
- #include "stdafx.h"
- #include "Music.h"
- CMusic::CMusic(HWND hWnd)
- {
- m_pDirectAudioPerformance = NULL;
- m_pDirectAudioLoader = NULL;
- m_pSegment = NULL;
- m_pGraph = NULL;
- m_pMediaControl = NULL;
- m_pMediaPosition = NULL;
- m_enumFormat = Unknown;
- CoInitialize(NULL);
- //Create the DirectAudio performance object
- CoCreateInstance(CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC,
- IID_IDirectMusicPerformance8, (void**) &m_pDirectAudioPerformance);
- //Create the DirectAudio loader object
- CoCreateInstance(CLSID_DirectMusicLoader, NULL, CLSCTX_INPROC,
- IID_IDirectMusicLoader8, (void**) &m_pDirectAudioLoader);
- //Initialise the performance object
- m_pDirectAudioPerformance->InitAudio(NULL, NULL, hWnd, DMUS_APATH_SHARED_STEREOPLUSREVERB,
- 64, DMUS_AUDIOF_ALL, NULL);
- GetCurrentDirectory(MAX_PATH, strSoundPath);
- MultiByteToWideChar(CP_ACP, 0, strSoundPath, -1, wstrSoundPath, MAX_PATH);
- m_pDirectAudioLoader->SetSearchDirectory(GUID_DirectMusicAllTypes, wstrSoundPath, FALSE);
- 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);
- }
- CMusic::~CMusic()
- {
- m_pDirectAudioPerformance->Stop(NULL, NULL, 0, 0);
- m_pDirectAudioPerformance->CloseDown();
- //SafeRRelease(m_pDirectAudioLoader);
- //SafeRRelease(m_pDirectAudioPerformance);
- m_pDirectAudioLoader->Release();
- m_pDirectAudioPerformance->Release();
- CoUninitialize();
- }
- void CMusic::Play(int t,LPSTR pStr)
- {
- switch(t)
- {
- case 0:
- m_enumFormat = WavMidi;
- //初始化WAV文件,将文件名转换为unicode
- MultiByteToWideChar(CP_ACP, 0, "2-02 Ahead on Our Way Midi.mid", -1, wstrSoundPath, MAX_PATH);
- //加载声音
- m_pDirectAudioLoader->LoadObjectFromFile(CLSID_DirectMusicSegment, IID_IDirectMusicSegment8,
- wstrSoundPath, (void**) &m_pSegment);
- m_pSegment->Download(m_pDirectAudioPerformance);
- m_pSegment->SetRepeats(-1); //这里可以设置循环次数,-1为循环播放
- m_pDirectAudioPerformance->PlaySegmentEx(m_pSegment, NULL, NULL, 0, 0, NULL, NULL, NULL);
- break;
- case 1:
- m_enumFormat = MP3;
- //初始化MP3文件,得到MP3文件所在的目录
- GetCurrentDirectory(MAX_PATH, strSoundPath);
- strcat(strSoundPath, pStr);//\Love.mp3
- //将文件名转换为unicode
- MultiByteToWideChar(CP_ACP, 0, strSoundPath, -1, wstrSoundPath, MAX_PATH);
- m_pGraph->RenderFile(wstrSoundPath, NULL);
- m_pMediaPosition->put_CurrentPosition(0);
- m_pMediaControl->Run();
- break;
- }
- }