要想向游戏引擎添加MIDI支持,需要做的第一件事就是记录MIDI编曲设备ID。向GameEngine.h添加一个新的成员变量即可:
UINT m_uiMIDIPlayerID;
在GameEngine()构造函数初始化m_uiMIDIPlayerID成员变量,如下所示:
m_uiMIDIPlayerID = 0;
在游戏引擎中完成MIDI音乐播放的3个新方法:
void PlayMIDISong(LPTSTR szMIDIFileName = TEXT(""),
BOOL bRestart = TRUE);
void PauseMIDISong();
void CloseMIDIPlayer();
分别表示播放,暂停,停止MIDI音乐。
下面是这3个函数的程序清单:
- //GameEngine.cpp
- void GameEngine::PlayMIDISong(LPTSTR szMIDIFileName, BOOL bRestart)
- {
- // See if the MIDI player needs to be opened
- if (m_uiMIDIPlayerID == 0)
- {
- // Open the MIDI player by specifying the device and filename
- MCI_OPEN_PARMS mciOpenParms;
- mciOpenParms.lpstrDeviceType = "sequencer";
- mciOpenParms.lpstrElementName = szMIDIFileName;
- if (mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,
- (DWORD)&mciOpenParms) == 0)
- // Get the ID for the MIDI player
- m_uiMIDIPlayerID = mciOpenParms.wDeviceID;
- else
- // There was a problem, so just return
- return;
- }
- // Restart the MIDI song, if necessary
- if (bRestart)
- {
- MCI_SEEK_PARMS mciSeekParms;
- if (mciSendCommand(m_uiMIDIPlayerID, MCI_SEEK, MCI_SEEK_TO_START,
- (DWORD)&mciSeekParms) != 0)
- // There was a problem, so close the MIDI player
- CloseMIDIPlayer();
- }
- // Play the MIDI song
- MCI_PLAY_PARMS mciPlayParms;
- if (mciSendCommand(m_uiMIDIPlayerID, MCI_PLAY, 0,
- (DWORD)&mciPlayParms) != 0)
- // There was a problem, so close the MIDI player
- CloseMIDIPlayer();
- }
- void GameEngine::PauseMIDISong()
- {
- // Pause the currently playing song, if possible
- if (m_uiMIDIPlayerID != 0)
- mciSendCommand(m_uiMIDIPlayerID, MCI_PAUSE, 0, NULL);
- }
- void GameEngine::CloseMIDIPlayer()
- {
- // Close the MIDI player, if possible
- if (m_uiMIDIPlayerID != 0)
- {
- mciSendCommand(m_uiMIDIPlayerID, MCI_CLOSE, 0, NULL);
- m_uiMIDIPlayerID = 0;
- }
- }