2D游戏引擎(七)——添加MIDI音乐支持

要想向游戏引擎添加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个函数的程序清单:

  1. //GameEngine.cpp
  2. void GameEngine::PlayMIDISong(LPTSTR szMIDIFileName, BOOL bRestart)
  3. {
  4.   // See if the MIDI player needs to be opened
  5.   if (m_uiMIDIPlayerID == 0)
  6.   {
  7.     // Open the MIDI player by specifying the device and filename
  8.     MCI_OPEN_PARMS mciOpenParms;
  9.     mciOpenParms.lpstrDeviceType = "sequencer";
  10.     mciOpenParms.lpstrElementName = szMIDIFileName;
  11.     if (mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,
  12.       (DWORD)&mciOpenParms) == 0)
  13.       // Get the ID for the MIDI player
  14.       m_uiMIDIPlayerID = mciOpenParms.wDeviceID;
  15.     else
  16.       // There was a problem, so just return
  17.       return;
  18.   }
  19.   // Restart the MIDI song, if necessary
  20.   if (bRestart)
  21.   {
  22.     MCI_SEEK_PARMS mciSeekParms;
  23.     if (mciSendCommand(m_uiMIDIPlayerID, MCI_SEEK, MCI_SEEK_TO_START,
  24.       (DWORD)&mciSeekParms) != 0)
  25.       // There was a problem, so close the MIDI player
  26.       CloseMIDIPlayer();
  27.   }
  28.   // Play the MIDI song
  29.   MCI_PLAY_PARMS mciPlayParms;
  30.   if (mciSendCommand(m_uiMIDIPlayerID, MCI_PLAY, 0,
  31.     (DWORD)&mciPlayParms) != 0)
  32.     // There was a problem, so close the MIDI player
  33.     CloseMIDIPlayer();
  34. }
  35. void GameEngine::PauseMIDISong()
  36. {
  37.   // Pause the currently playing song, if possible
  38.   if (m_uiMIDIPlayerID != 0)
  39.     mciSendCommand(m_uiMIDIPlayerID, MCI_PAUSE, 0, NULL);
  40. }
  41. void GameEngine::CloseMIDIPlayer()
  42. {
  43.   // Close the MIDI player, if possible
  44.   if (m_uiMIDIPlayerID != 0)
  45.   {
  46.     mciSendCommand(m_uiMIDIPlayerID, MCI_CLOSE, 0, NULL);
  47.     m_uiMIDIPlayerID = 0;
  48.   }
  49. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值