📄 cmidi.cpp
字号:
/*
* Midi的应用播放函数
* 编辑: jzZ 2000,05
*/
#include "CMidi.h"
/*播放
*打开设备并且开始播放midi文件
*
*/
DWORD CMidi::Play(HWND hwnd,char* MidiFile)
{
// 开启Midi的硬体装置,我们使用一般内定值
mciOpenParms.lpstrDeviceType = "sequencer";
//这个参数就是要播放的MIDI档案名称
mciOpenParms.lpstrElementName = MidiFile;
//使用Message的方式来播放MIDI而不是STRING的方式
if (dwReturn = mciSendCommand(NULL, MCI_OPEN,
MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,
(DWORD)(LPVOID) &mciOpenParms))return (dwReturn);
// 打开设备成功,得到设备 ID.
wDeviceID = mciOpenParms.wDeviceID;
// 检测输出是否是 MIDI mapper.
mciStatusParms.dwItem = MCI_SEQ_STATUS_PORT;
if (dwReturn = mciSendCommand(wDeviceID, MCI_STATUS,
MCI_STATUS_ITEM, (DWORD)(LPVOID) &mciStatusParms))
{
mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
return (dwReturn);
}
// 为了达成重复播放的目的,必须让我们的程式能够接收到
// MM_MCINOTIFY的讯息,这个函示呼叫的方式,就是传递
// WM_PLAY讯息给装置,叫他开始播放。
mciPlayParms.dwCallback = (DWORD) hwnd;
if (dwReturn = mciSendCommand(wDeviceID, MCI_PLAY, MCI_NOTIFY,
(DWORD)(LPVOID) &mciPlayParms))
{
mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
return (dwReturn);
}
return (0L);
}
/*重新播放
*
*重播一个已经播放的midi
*/
void CMidi::Replay()
{
mciSendCommand(wDeviceID, MCI_SEEK,MCI_SEEK_TO_START, NULL);
mciSendCommand(wDeviceID, MCI_PLAY, MCI_NOTIFY, (DWORD)(LPVOID) &mciPlayParms);
}
/*停止播放
*停止正在播放的MIDI,并且销毁设备关联
*/
void CMidi::Stop()
{
mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
}
/*播放另外一首MIDI
*在已经用Play启动MIDI播放后,改变播放的文件
*/
DWORD CMidi::ChangePlay(char* MidiFile)
{
mciOpenParms.lpstrElementName = MidiFile;
if (dwReturn = mciSendCommand(NULL, MCI_OPEN,
MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,
(DWORD)(LPVOID) &mciOpenParms))return (dwReturn);
return (0L);
}
/*销毁器
*自动调用停止函数
*/
CMidi::~CMidi()
{
Stop();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -