使用mciSendCommand循环播放音乐
来源:互联网 发布:淘宝全球购举报 编辑:程序博客网 时间:2024/05/07 12:59
方法一:最简单的方法
使用重复播放参数:MCI_DGV_PLAY_REPEAT
mciSendCommand(m_nDeviceID, MCI_PLAY,MCI_DGV_PLAY_REPEAT, (DWORD)&mciPlay))
需要头文件:
#include <Digitalv.h>#include <MMSystem.h>#pragma comment(lib , "winmm.lib")。。。。。。
MCIDEVICEID m_nDeviceID;。。。。。。
void CMyDlg::OpenMciDeveci(void){ DWORD dwResult = 0; MCI_OPEN_PARMS mciOpenParms; mciOpenParms.lpstrDeviceType = _T("sequencer"); mciOpenParms.lpstrElementName = _T(SOUND_BACK); dwResult = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD)&mciOpenParms); //save device identifier,will use eith other MCI commands m_nDeviceID = mciOpenParms.wDeviceID; if (dwResult != 0) { MessageBox(L"加载背景音乐失败!"); }}void CMyDlg::PlayBackMusic(void){ MCI_PLAY_PARMS mciPlay; if(mciSendCommand(m_nDeviceID, MCI_PLAY, MCI_DGV_PLAY_REPEAT, (DWORD)&mciPlay)) { MessageBox(L"播放背景音乐失败!"); }}
我把他的代码改装了下。利用MCI_SEEK命令将播放位置重置到开头,然后再调用MCI_PLAY命令,即可从头开始播放。这样就省去了打开关闭文件时带来的额外开销。
///MCIPlayMusic.h /** * @file MCIPlayMusic.h * @author 游蓝海* @mail you_lan_hai@foxmail.com* @data 2011-11-30* 说明:* 改装自如《何播放大型 WAV 文件?》 * 原作者:hermess* http://www.vckbase.com/document/viewdoc/?id=633*/#pragma once#include <MMSystem.h>/**播放音乐类*/class cMciPlayMusic{public: ///构造函数 cMciPlayMusic(); virtual ~cMciPlayMusic();public: DWORD openDevice(); DWORD closeDevice(); DWORD play(CWnd *pParentWnd,LPCTSTR pFileName); DWORD stop(); DWORD seekToStart(); LPCTSTR getErrorMsg(DWORD dwError); MCIDEVICEID getDeviceID(void){ return m_nDeviceID; } MCIDEVICEID getElementID(void){ return m_nElementID; }protected: MCIDEVICEID m_nDeviceID; MCIDEVICEID m_nElementID;};
#include <stdafx.h>#include "MCIPlayMusic.h"cMciPlayMusic::cMciPlayMusic(){ m_nDeviceID=0; m_nElementID=0;}cMciPlayMusic::~cMciPlayMusic(){ if(m_nElementID != 0) { stop(); } if(m_nDeviceID != 0) { closeDevice(); }}DWORD cMciPlayMusic::openDevice(){ DWORD dwResult=0; if (m_nDeviceID == 0) { MCI_OPEN_PARMS mciOpenParms; ZeroMemory(&mciOpenParms, sizeof(mciOpenParms)); //mciOpenParms.lpstrDeviceType = (LPCTSTR)MCI_DEVTYPE_WAVEFORM_AUDIO; mciOpenParms.lpstrDeviceType = (LPCTSTR)MCI_DEVTYPE_SEQUENCER; //open the wave device dwResult = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID|MCI_WAIT, (DWORD)(LPVOID)&mciOpenParms); //save device identifier,will use eith other MCI commands m_nDeviceID = mciOpenParms.wDeviceID; } //return result of MCI operation return dwResult;}DWORD cMciPlayMusic::closeDevice(){ DWORD dwResult=0; //close if currently open if(m_nDeviceID) { //close the MCI device dwResult=mciSendCommand(m_nDeviceID,MCI_CLOSE,NULL,NULL); //display error message if failed if(!dwResult) { m_nDeviceID=0; } } //return result of MCI operation return dwResult;}DWORD cMciPlayMusic::play(CWnd* pWnd,LPCTSTR pFileName){ if (m_nElementID == 0) { MCI_OPEN_PARMS mciOpenParms; //initialize structure memset(&mciOpenParms,0,sizeof(MCI_OPEN_PARMS)); //set the WAV file name to be played mciOpenParms.lpstrElementName = pFileName; //first open the device DWORD dwResult = mciSendCommand(m_nDeviceID,MCI_OPEN, MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&mciOpenParms); if (dwResult != 0) { return dwResult; } else { //save element indentifier m_nElementID = mciOpenParms.wDeviceID; } } MCI_PLAY_PARMS mciPlayParms; //set the window that will receive notification message mciPlayParms.dwCallback = (DWORD)pWnd->m_hWnd; //instruct device to play file DWORD dwResult=mciSendCommand(m_nElementID,MCI_PLAY, MCI_NOTIFY,(DWORD)(LPVOID)&mciPlayParms); //display error and close element if failed if(dwResult != 0)//失败 { stop(); } //return result of MCI operation return dwResult;}DWORD cMciPlayMusic::stop(){ DWORD dwResult=0; //close if element is currently open if(m_nElementID != 0) { dwResult=mciSendCommand(m_nElementID,MCI_CLOSE,NULL,NULL); //display error message if failed if(dwResult == 0) { m_nElementID=0; } } return dwResult;}DWORD cMciPlayMusic::seekToStart(){ DWORD dwResult=0; //close if element is currently open if(m_nElementID != 0) { MCI_SEEK_PARMS seekParam; ZeroMemory(&seekParam, sizeof(seekParam)); dwResult=mciSendCommand(m_nElementID, MCI_SEEK, MCI_SEEK_TO_START, (DWORD)&seekParam); } return dwResult;}LPCTSTR cMciPlayMusic::getErrorMsg(DWORD dwError){ //character string that contains error message static TCHAR szErrorMsg[MAXERRORLENGTH]; //check if there was an error if(dwError) { //retrieve string associated error message if(!mciGetErrorString(dwError,szErrorMsg,sizeof(szErrorMsg))) { lstrcpy(szErrorMsg,_T("未知错误。")); } } else { lstrcpy(szErrorMsg, _T("没有错误。")); } return szErrorMsg;}
给窗口添加响应消息:ON_MESSAGE(MM_MCINOTIFY, &CMyDlg::OnMCINotify)
LRESULT CMyDlg::OnMCINotify(WPARAM wParam, LPARAM lParam){ if (wParam == MCI_NOTIFY_SUCCESSFUL ) { PlayBackMusic(); } return 0;}void CMyDlg::OpenMciDeveci(void){ DWORD dwResult = 0; dwResult = m_mciMusic.openDevice(); if(0 != dwResult) { MessageBox(m_mciMusic.getErrorMsg(dwResult)); }}void CMyLLKDlg::PlayBackMusic(void){ m_mciMusic.seekToStart(); //m_mciMusic.stop(); DWORD dwResult = m_mciMusic.play(this, _T(“your_music.mp3”)); if (dwResult != 0) { MessageBox(m_mciMusic.getErrorMsg(dwResult)); }}
- 使用mciSendCommand循环播放音乐
- 使用mciSendCommand循环播放音乐
- 使用mciSendCommand循环播放音乐
- 使用C#调用win32 mciSendCommand 播放音乐
- 音乐播放器 mciSendCommand
- 用mciSendCommand实现的音乐播放类
- 循环播放音乐
- 网页背景音乐循环播放
- IOS循环播放音乐实例
- iphone 后台循环播放音乐
- angularjs的音乐循环播放
- mciSendCommand 音频视频播放命令函数
- 使用IrrKlang播放音乐
- 使用Service播放音乐
- 使用service播放音乐
- 使用AudioPlayer播放音乐
- 使用AVAudioPlayer播放音乐
- mciSendCommand 函数的使用!
- netbeans下解决Illegal instruction的方法
- Kconfig的作用
- android context的别
- java 中异常
- SQL删除id号不同,其他都相同的学生冗余信息
- 使用mciSendCommand循环播放音乐
- 如何运行jasperReport自带的例子程序
- DEDECMS系统模版文件说明
- 谜题1.3 逻辑操作符和增量操作符
- 希尔排序(Shell Sort)
- 网络名字解释
- Jquery AJAX POST和GET区别
- SQL航空网的几个航班查询题:
- 织梦Dedecms源码文件夹目录模板解释说明