使用MCI播放声音
  9aGNI37h2JhV 2023年11月05日 50 0
  1. #pragma
  2. #define
  3. //Windows头文件
  4. #include<Windows.h>
  5. #include<mmsystem.h>
  6. #include<tchar.h>
  7. #include<string>
  8. #include<iostream>
  9. #pragma comment(lib,"winmm.lib")
  10. void playmp3(std::wstring mp3file);
  11. void Testplaymp3();
  12. void playmp3(std::wstring mp3file)
  13. {
  14. std::wstring wstr = L"open ./Baidu-Tts.mp3 alias mp3";
  15. /*std::wcout << wstr << std::endl;
  16. std::wcout << mp3file << std::endl;*/
  17. wstr.append(mp3file);
  18. /*std::wcout << wstr << std::endl;*/
  19. wstr.append(L" alias mp3");
  20. /*std::wcout << wstr << std::endl;*/
  21. mciSendString((LPCSTR)wstr.c_str(), nullptr, 0, nullptr);
  22. mciSendString(_T("play mp3"), nullptr, 0, nullptr);
  23. }
  24. void Testplaymp3()
  25. {
  26. mciSendString("open ./Baidu-Tts.mp3 alias mp3", nullptr, 0, nullptr);
  27. mciSendString("play mp3", nullptr, 0, nullptr);
  28. char cPosition[256];
  29. long mp3Length = 0;
  30. mciSendString("Status mp3 length", cPosition, 255, NULL);
  31. mp3Length = strtol(cPosition, NULL, 10);
  32. std::cout << "声音时长:"<< mp3Length << "ms" << std::endl;
  33. }
  34. //参考https://blog.csdn.net/aijia1857/article/details/101134620
  35. void testmcicmd()
  36. {
  37. //打开MCI设备
  38. MCI_OPEN_PARMS mciOP;
  39. DWORD opReturn;
  40. MCIDEVICEID wIDDevioce; //保存设备ID
  41. mciOP.lpstrDeviceType = NULL;
  42. mciOP.lpstrElementName = (LPCSTR)"./Baidu-Tts.mp3"; //设置打开的文件的名称
  43. opReturn = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD)(LPVOID)&mciOP);
  44. if (opReturn == 0)
  45. {
  46. wIDDevioce = mciOP.wDeviceID;//播放设备Id
  47. //设置设备信息
  48. MCI_SET_PARMS mciSet;
  49. mciSet.dwTimeFormat = MCI_FORMAT_MILLISECONDS; //设置时间单位为毫秒
  50. mciSendCommand(wIDDevioce, MCI_SET, MCI_SET_TIME_FORMAT, (DWORD)(LPVOID)&mciSet);
  51. //音频播放
  52. MCI_PLAY_PARMS mciPP;
  53. DWORD opReturn;
  54. opReturn = mciSendCommand(wIDDevioce, MCI_PLAY, MCI_NOTIFY, (DWORD)&mciPP);
  55. MCI_STATUS_PARMS mciSP;
  56. DWORD dwLength = 0;
  57. mciSP.dwItem = MCI_STATUS_LENGTH;
  58. DWORD dwReturn = mciSendCommand(wIDDevioce, MCI_STATUS, MCI_STATUS_ITEM,
  59. (DWORD)(LPVOID)&mciSP);
  60. if (dwReturn == 0)
  61. dwLength = mciSP.dwReturn / 1000;
  62. std::cout << "声音时长:" << dwLength << "s" << std::endl;
  63. MCI_STATUS_PARMS mciStatus;
  64. mciStatus.dwItem = MCI_STATUS_TIME_FORMAT;
  65. DWORD sta2Return = mciSendCommand(wIDDevioce, MCI_STATUS, MCI_STATUS_ITEM, (DWORD)(LPVOID)&mciStatus);
  66. DWORD music_timestyle = mciStatus.dwReturn; //获得当前的时间格式
  67. mciStatus.dwItem = MCI_STATUS_MODE;
  68. DWORD sta3Return = mciSendCommand(wIDDevioce, MCI_STATUS, MCI_STATUS_ITEM, (DWORD)(LPVOID)&mciStatus);
  69. DWORD music_playstyle = mciStatus.dwReturn; //获得当前播放工作模式 播放 526 暂停525
  70. }
  71. else
  72. {
  73. wIDDevioce = NULL;
  74. LPTSTR lptstr = (LPTSTR)malloc(sizeof(CHAR) * 255);
  75. UINT len = 255;
  76. if (mciGetErrorString(opReturn,lptstr,len) == TRUE)
  77. {
  78. std::cout << lptstr << std::endl;
  79. }
  80. free(lptstr);
  81. }
  82. }
  83. #include<conio.h>
  84. #include"mciplayer.h"
  85. int main(int argc, char* argv[])
  86. {
  87. /*Testplaymp3();*/
  88. testmcicmd();
  89. _getch();
  90. return 0;
  91. }

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  anLrwkgbyYZS   2023年12月30日   28   0   0 i++iosi++ioscici
  anLrwkgbyYZS   2023年12月30日   33   0   0 ideciciMaxideMax
9aGNI37h2JhV