MEDIA.CPP
上传用户:lianyisd
上传日期:2019-11-03
资源大小:5188k
文件大小:5k
源码类别:

midi

开发平台:

Visual C++

  1. // Sound.cpp: implementation of the CSound class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "Multimedia.h"
  6. #include "Media.h"
  7. #include "string.h"
  8. #ifdef _DEBUG
  9. #undef THIS_FILE
  10. static char THIS_FILE[]=__FILE__;
  11. #define new DEBUG_NEW
  12. #endif
  13. //////////////////////////////////////////////////////////////////////
  14. // Construction/Destruction
  15. //////////////////////////////////////////////////////////////////////
  16. CMedia::CMedia()
  17. {
  18. m_nDeviceID = 1;
  19. dwResult = 0;
  20. mciPlayParms.dwFrom = 0;
  21. closed = stopped = true;
  22. paused = false;
  23. }
  24. CMedia::~CMedia()
  25. {
  26. }
  27. DWORD CMedia::OpenDevice(LPCSTR pFileName,LPCSTR pFileExt)
  28. {
  29. if(!closed)
  30. {
  31. CloseDevice();
  32. closed = true;
  33. m_nDeviceID = 1;
  34. }
  35. if(paused)
  36. paused = false;
  37. if (m_nDeviceID)
  38.     {
  39. if(strcmp(pFileExt,"WAV") == 0 || strcmp(pFileExt,"wav") == 0)
  40. {
  41. mciOpenParms.lpstrDeviceType = "waveaudio";
  42. type = WAVE;
  43. }
  44. else if(strcmp(pFileExt,"MID") == 0 || strcmp(pFileExt,"mid") == 0)
  45. {
  46. mciOpenParms.lpstrDeviceType = "sequencer";
  47. type = MIDI;
  48. }
  49. else if(strcmp(pFileExt,"CD") == 0 || strcmp(pFileExt,"cd") == 0)
  50. {
  51. mciOpenParms.lpstrDeviceType = "cdaudio";
  52. type = CD;
  53. }
  54. else if(strcmp(pFileExt,"AVI") == 0 || strcmp(pFileExt,"avi") == 0)
  55. {
  56. mciOpenParms.lpstrDeviceType = "avivideo";
  57. type = AVI;
  58. }
  59. //open the sound device
  60. mciOpenParms.wDeviceID = 0;
  61. mciOpenParms.lpstrElementName = pFileName;
  62. dwResult = mciSendCommand(NULL, MCI_OPEN,  MCI_WAIT|MCI_OPEN_TYPE|
  63. MCI_OPEN_ELEMENT,(DWORD)(LPMCI_OPEN_PARMS)&mciOpenParms);
  64.         //save device identifier,will use eith other MCI commands
  65. m_nDeviceID = mciOpenParms.wDeviceID;
  66. //display error message if failed 
  67. if(dwResult)
  68. DisplayErrorMsg(dwResult);
  69. else
  70. {
  71. stopped = closed =false;
  72. }
  73. }
  74. //return result of MCI operation
  75. return dwResult;
  76. }
  77. void CMedia::DisplayErrorMsg(DWORD dwError)
  78. {
  79. //check if there was an error
  80.     if(dwError)
  81.     {
  82. //character string that contains error message
  83. char szErrorMsg[MAXERRORLENGTH];
  84. //retrieve string associated error message
  85. if(!mciGetErrorString(dwError,szErrorMsg,sizeof(szErrorMsg)))
  86. strcpy(szErrorMsg,"Unknown Error");
  87. //display error string in message box
  88. AfxMessageBox(szErrorMsg);
  89.     }
  90. }
  91. DWORD CMedia::Play(CWnd* pWnd,LPCSTR pFileName)
  92. {
  93. //instruct device to play file
  94. if(paused && type == WAVE)
  95. {
  96. dwResult = mciSendCommand(m_nDeviceID,MCI_RESUME,MCI_WAIT,
  97. (DWORD) (LPMCI_GENERIC_PARMS) &mciGenericParms);
  98. paused = false;
  99. }
  100. else if(type != NONE)
  101. dwResult = mciSendCommand(m_nDeviceID,MCI_PLAY,
  102. MCI_FROM,(DWORD)(LPMCI_PLAY_PARMS)&mciPlayParms);
  103. //display error and close element if failed
  104. if(dwResult)
  105.         {
  106. DisplayErrorMsg(dwResult);
  107. Stop();
  108. stopped = true;
  109. }
  110. else
  111. stopped = false;
  112. //return result of MCI operation
  113. return dwResult;
  114. }
  115. DWORD CMedia::Stop()
  116. {
  117. //close if element is currently open
  118. if(m_nDeviceID)
  119. {
  120. dwResult = mciSendCommand(m_nDeviceID,MCI_STOP,
  121. MCI_WAIT,(DWORD) (LPMCI_GENERIC_PARMS) &mciStopParms);
  122. //display error message if failed
  123. if(dwResult)
  124. DisplayErrorMsg(dwResult);
  125. }
  126. stopped = true;
  127. return dwResult;
  128. }
  129. DWORD CMedia::CloseDevice()
  130. {
  131. //close if currently open
  132. if(m_nDeviceID && !stopped)
  133. {
  134. //close the MCI device
  135. dwResult=mciSendCommand(m_nDeviceID,MCI_CLOSE,MCI_WAIT,NULL);
  136. //display error message if failed
  137. if(dwResult)
  138. DisplayErrorMsg(dwResult);
  139. //set identifier to close state
  140. else 
  141. m_nDeviceID=0;
  142. }
  143. //return result of MCI operation
  144. closed = true;
  145. return dwResult;
  146. }
  147. DWORD CMedia::Pause()
  148. {
  149. if(m_nDeviceID)
  150. {
  151. dwResult = mciSendCommand (m_nDeviceID, 
  152. MCI_PAUSE, MCI_WAIT,(DWORD)(LPMCI_GENERIC_PARMS) &mciGenericParms);
  153. if(dwResult)
  154. {
  155. DisplayErrorMsg(dwResult);
  156. return dwResult;
  157. }
  158. }
  159. paused = true;
  160. return dwResult;
  161. }
  162. DWORD CMedia::BeginRecord()
  163. {
  164. if(m_nDeviceID)
  165. {
  166. dwResult = mciSendCommand (m_nDeviceID, MCI_RECORD, 
  167. NULL, (DWORD)(LPMCI_RECORD_PARMS)&mciRecordParms);
  168. if(dwResult)
  169. DisplayErrorMsg(dwResult);
  170. }
  171. return dwResult;
  172. }
  173. DWORD CMedia::SaveRecord(LPCSTR pFilename)
  174. {
  175. if(m_nDeviceID)
  176. {
  177. mciSaveParms.lpfilename = pFilename;
  178. dwResult = mciSendCommand (m_nDeviceID, MCI_SAVE, 
  179. MCI_SAVE_FILE | MCI_WAIT,(DWORD)(LPMCI_SAVE_PARMS) &mciSaveParms);
  180. if(dwResult)
  181. DisplayErrorMsg(dwResult);
  182. }
  183. return dwResult;
  184. }
  185. DWORD CMedia::OpenCDRom()
  186. {
  187. if(m_nDeviceID)
  188. {
  189. if(!closed)
  190. CloseDevice();
  191. dwResult = mciSendCommand (m_nDeviceID, MCI_SET,MCI_SET_DOOR_OPEN, NULL);
  192. if(dwResult)
  193. DisplayErrorMsg(dwResult);
  194. }
  195. return dwResult;
  196. }
  197. DWORD CMedia::CloseCDRom()
  198. {
  199. if(m_nDeviceID)
  200. {
  201. dwResult = mciSendCommand (m_nDeviceID, MCI_SET,MCI_SET_DOOR_CLOSED, NULL);
  202. if(dwResult)
  203. DisplayErrorMsg(dwResult);
  204. }
  205. return dwResult;
  206. }
  207. DWORD CMedia::Seek(int nMiniute, int nSecond)
  208. {
  209. if(m_nDeviceID)
  210. {
  211. mciSeekParms.dwTo = (nMiniute * 60 + nSecond) * 1000;
  212. dwResult = mciSendCommand (m_nDeviceID, MCI_SEEK,MCI_TO|MCI_WAIT, 
  213. (DWORD) (LPMCI_SEEK_PARMS)&mciSeekParms);
  214. if(dwResult)
  215. DisplayErrorMsg(dwResult);
  216. }
  217. return dwResult;
  218. }