文章目录

  • PlaySound
    • 函数功能
    • 函数原型
    • 头文件
    • 参数以及查常用选择
    • 返回值
    • 使用
      • 使用文件名播放
      • 使用资源标识符播放
  • mciSendString
    • 函数功能
    • 函数原型
    • 头文件
    • 参数解释
    • 返回值
      • 错误码获取
    • `lpszCommand`常用选择
      • 1、MCI命令
      • 2、MCI设备
      • 3、设备名
    • 播放mp3的操作
      • 1、打开
      • 2、播放
      • 3、暂停
      • 4、继续
      • 5、停止
      • 6、关闭
      • 7、获取当前播放信息
      • 8、设置当前播放位置
      • 代码
  • mciSendCommand
    • 函数功能
    • 函数原型
    • 头文件
    • 参数解释
    • 返回值
      • 错误码获取
    • easyx音乐播放器(转载)
      • 1、打开文件
      • 2、播放
      • 3、暂停
      • 4、停止
      • 5、关闭
      • 6、获取当前播放时间
      • 7、获取音乐总时长
      • 8、设置音量大小
      • 9、设置播放位置
  • 踩过的坑
  • 百度云链接

PlaySound

MSDN API链接

函数功能

播放由给定的文件名,资源或系统事件指定声音。

函数原型

BOOL PlaySound(LPCTSTR pszSound,HMODULE hmod,DWORD   fdwSound
);

头文件

#include <Windows.h>
#include <mmsystem.h>
#pragma comment (lib, "winmm.lib")

参数以及查常用选择

  • pszSound — 指定要播放的声音

    • NULL 停止所有声音播放
    • 音乐文件的路径(参数3必须有SND_FILENAME)
    • 音乐文件资源ID(参数3必须有SND_RESOURCE)
  • hmod — 指向包含要加载资源的可执行文件的句柄
    • NULL
    • 当前窗口实例句柄(官网上例子:GetModuleHandle(NULL)
  • fdwSound — 用于播放声音的标志
    • SND_FILENAME:通过文件名播放音乐
    • SND_RESOURCE:通过资源标识符播放音乐,(音乐会编译进exe文件,不推荐使用)
    • SND_ASYNC:异步播放
    • SND_LOOP:循环播放

返回值

  • true — 成功
  • false — 失败

使用

使用文件名播放

#include <stdio.h>
#include <Windows.h>
#include <mmsystem.h>#pragma comment (lib,"winmm.lib")int main(void)
{if (0 == PlaySound(TEXT("亡灵序曲+-+The+Dawn.wav"), NULL, SND_FILENAME | SND_ASYNC)){printf("playsound false");}system("pause");return 0;
}

使用资源标识符播放

添加资源文件:





记得保存一下

在添加资源的时候系统会自动创建资源头文件:

在里面可以找到资源标识符

程序:

#include <stdio.h>
#include <Windows.h>
#include <mmsystem.h>#include "resource.h"#pragma comment (lib,"winmm.lib")int main(void)
{if (0 == PlaySound(MAKEINTRESOURCE(IDR_WAVE1), NULL, SND_RESOURCE | SND_ASYNC)){printf("playsound false");}system("pause");return 0;
}

mciSendString

MSDN API链接

函数功能

发送一个命令串到MCI设备。用来播放多媒体文件的API指令。

函数原型

MCIERROR mciSendString(LPCTSTR lpszCommand,LPTSTR  lpszReturnString,UINT    cchReturn,HANDLE  hwndCallback
);

头文件

#include <Windows.h>
#include <mmsystem.h>
#pragma comment (lib, "winmm.lib")

参数解释

  • lpszCommand — 要发送的命令字符串。字符串结构是:[命令][设备别名][命令参数]
  • lpszReturnString — 返回信息的缓冲区(指定了大小的字符串变量)
  • cchReturn — 缓冲区的大小(参数二字符变量的长度)
  • hwndCallback — 回调窗口的句柄(一般设为零)

返回值

  • 0 — 执行成功
  • 错误代码(返回的DWORD值的低位字包含错误返回值。如果错误是特定于设备的,则返回值的高位字是驱动程序标识符;否则,高阶字为零。) — 执行错误

错误码获取

BOOL mciGetErrorString(DWORD fdwError,     // 函数mciSendString返回的错误码LPTSTR lpszErrorText,  // 接收描述错误的字符串的缓冲区UINT  cchErrorText   // 缓冲区的长度
);

lpszCommand常用选择

1、MCI命令

使用MCI设备一般包括打开、使用和关闭三个过程,常用的MCI命令有:

命令 解释
open 打开设备
close 关闭设备
play 开始设备播放
stop 停止设备的播放或记录
record 开始记录
save 保存设备内容
pause 暂停设备的播放或记录
resume 恢复暂停播放或记录的设备
seek 改变媒体的当前位置
capacility 查询设备能力
info 查询设备的信息
status 查询设备状态信息

MCI的大部分命令可以控制不同的媒体设备,但其中record和save命令并不是所有MCI设备都可以使用。

MCI命令的使用是很随意的,只要先打开,最后关闭,中间可以随意调用各种命令。

2、MCI设备

MCI的设备类型如下:

设备类型 解释
animation 动画设备
cdaudio CD播放器
dat 数字音频磁带机
digitalvideo 某一窗口中的数字视频(不基于GDI)
other 未定义的MCI设备
overlay 重叠设备(窗口中的模拟视频)
scanner 图象扫描仪
sequencer MIDI序列器
videodisc 视盘机
waveaudio 播放数字波形文件的音频设备

3、设备名

设备名是在注册表或SYSTEM.INI的[mci]部分定义的,典型的[mci]段如下:

cdaudio=mcicda.drv
sequencer=mciseq.drv
waveaudio=mciwave.drv
avivideo=mciavi.drv
videodisc=mcipionr.drv

等号的左边是设备名,右边是对应的MCI驱动程序。当安装了新的MCI驱动程序时,系统要用不同的设备名来区分。

播放mp3的操作

1、打开

"open mName type MPEGVideo Alias movie parent %u Style %u notify"

命令 解释
open 操作命令
mName 全路径文件名
type MPEGVideo 是指打开MPEG,AVI等类型,如果不加这一句,就是打开WAV,MP3等
Alias movie 定义了该操作的别名为movie,后续操作只要指明别名即可
parent %u
Style %u 风格、样式
notify 通知

2、播放

命令 解释
"Play 设备名 [from 起点][to 终点]" 播放一部分一次
"play movie" 播放一次
"play movie repeat" 循环播放

3、暂停

"pause movie"

4、继续

"resume movie"

5、停止

"stop movie"

6、关闭

"close movie"

7、获取当前播放信息

命令 解释
"status movie position" 播放位置
"status movie length" 播放总长度
"status movie mode" 播放状态

8、设置当前播放位置

命令 解释
"seek movie to " 指定位置
"seek movie to start" 定位到开头位置
"seek movie to end" 定位到最后位置

代码

#include <stdio.h>
#include <Windows.h>
#include <mmsystem.h>
#include <strsafe.h>#pragma comment (lib,"winmm.lib")#define CLEAR_BUF \{\int ch; \
while ((ch = getchar()) != EOF && ch != '\n')\{\; \}\}// 显示命令
void ShowOrder()
{system("cls");printf("mciSendString order:\n");printf("1.open music\n");printf("2.close music\n");printf("3.play music\n");printf("33.play music repeat\n");printf("4.stop music\n");printf("5.pause music\n");printf("6.resume music\n");printf("7.status music position\n");printf("8.seek to position\n");printf("9.view playback status\n");printf("0.out\n");printf("Enter Your Choice:\n");
}void MymciSendString(const char* szCommand, char* szbuffer)
{if (NULL == szbuffer){if (0 != mciSendString(szCommand, NULL, 0, NULL)){printf("%s false!\n", szCommand);}else{printf("%s success!\n", szCommand);}}else{if (0 != mciSendString(szCommand, szbuffer, 1024, NULL)){printf("%s false!\n", szCommand);}else{printf("%s success!\n", szCommand);}}
}int main(void)
{int icommand = -1;_Bool bflag = 1;char szTimeBuffer[1024];char szModeBuffer[1024];char szCommandBuffer[1024];while (bflag){ShowOrder();scanf_s("%d", &icommand);// 方法1//fflush(stdout);// 方法2CLEAR_BUFswitch (icommand){case 1:MymciSendString("open AAA-恋音と雨空.mp3 alias BackMusic", NULL);break;case 2:MymciSendString("close BackMusic", NULL);break;case 3:MymciSendString("play BackMusic", NULL);break;case 33:MymciSendString("play BackMusic repeat", NULL);break;case 4:MymciSendString("stop BackMusic", NULL);break;case 5:MymciSendString("pause BackMusic", NULL);break;case 6:MymciSendString("resume BackMusic", NULL);break;case 7:MymciSendString("status BackMusic position", szTimeBuffer);break;case 8:StringCchPrintf(szCommandBuffer, sizeof(szCommandBuffer) - 1, "seek BackMusic to %s", szTimeBuffer);MymciSendString(szCommandBuffer, NULL);break;case 9:MymciSendString("status BackMusic mode", szModeBuffer);printf("%s", szModeBuffer);break;case 0:bflag = 0;break;default:printf("Input error!Please enter again.");break;}printf("\n");system("pause");}
}

1 打开音乐和 2 关闭音乐是对应的 播放音乐之前要先打开音乐
3 播放音乐和 4 停止播放是对应的
5 暂停播放和 6 继续播放是对应的‘
7 获取当前播放的位置 之后 可以使用 8 定位到刚刚的位置 实现设置播放位置
9 查看播放的状态
逻辑功能还有欠缺,只是一些功能的测试。

程序运行效果(因为这里只能放gif没有声音):

mciSendCommand

MSDN API链接

函数功能

发送一个命令消息到指定的MCI设备。

函数原型

MCIERROR mciSendCommand(MCIDEVICEID IDDevice,UINT        uMsg,DWORD_PTR   fdwCommand,DWORD_PTR   dwParam
);

头文件

#include <Windows.h>
#include <mmsystem.h>
#pragma comment (lib, "winmm.lib")

参数解释

  • IDDevice — 要接收命令消息的MCI设备的设备标识符。该参数不与MCI_OPEN命令消息一起使用。
  • uMsg — 命令消息。
  • fdwCommand — 命令消息的标志。
  • dwParam — 指向包含命令消息参数的结构的指针。

有链接的为常用的

命令(参数二) 结构(参数四) 作 用
MCI_BREAK MCI_BREAK_PARMS 为MCI设备设置一个中断键
MCI_CAPTURE MCI_DGV_CAPTURE_PARMS 抓取当前帧并存入指定文件
MCI_CLOSE MCI_GENERIC_PARMS 关闭设备,用于所有设备
MCI_CONFIGURE MCI_GENERIC_PARMS 弹出配置对话框,仅用于数字视频(Digital-video)
MCI_COPY MCI_DGV_COPY_PARMS 拷贝数据至剪贴板 仅用于数字视频
MCI_CUE MCI_GENERIC_PARMS 延时播放或录音 用于Digital-video, VCR, 和 waveform-audio
MCI_CUT MCI_DGV_CUT_PARMS 删除数据 ,并将数据复制到剪贴板 用于Digital-video
MCI_DELETE MCI_GENERIC_PARMS 将文件中的数据删除 用于 Digital-video 和 waveform-audio
MCI_ESCAPE MCI_VD_ESCAPE_PARMS 直接向设备发送一个串 仅用于激光视频
MCI_FREEZE MCI_GENERIC_PARMS 将显示定格 Digital-video, video-overlay, and VCR devices
MCI_GETDEVCAPS MCI_GETDEVCAPS_PARMS 获取设备信息,用于所有设备
MCI_INDEX MCI_GENERIC_PARMS 当前屏幕显示与否, 仅用于VCR设备
MCI_INFO MCI_INFO_PARMS 获取设备字符串信息
MCI_LIST MCI_GENERIC_PARMS 获取输入设备数量,支持数字视频和VCR设备
MCI_LOAD MCI_DGV_LOAD_PARMS 装入一个文件 Digital-video and video-overlay
MCI_MARK MCI_GENERIC_PARMS 取消或做一个记号,供MCI_SEEK快速定位 VCR devices
MCI_MONITOR MCI_DGV_MONITOR_PARMS 为数字视频指定报告设备
MCI_OPEN MCI_OPEN_PARMS 打开设备,用于所有设备
MCI_PASTE MCI_ DGV_ PASTE_ PARMS 粘帖数据 仅用于数字视频
MCI_PAUSE MCI_GENERIC_PARMS 暂停当前动作
MCI_PLAY MCI_PLAY_PARMS 播放
MCI_PUT MCI_GENERIC_PARMS 设置源、目的和边框矩形 Digital-video and video-overlay
MCI_QUALITY MCI_DGV_QUALITY_PARMS 定义设备缺省质量
MCI_RECORD MCI_RECORD_PARMS 开始录制 VCR and waveform-audio
MCI_RESERVE MCI_DGV_RESERVE_PARMS 为后面的记录分配相对连续的硬盘空间 Digital-video
MCI_RESTORE MCI_DGV_RESTORE_PARMS 拷贝一个bmp文件至帧缓冲 Digital-video
MCI_RESUME MCI_GENERIC_PARMS 使一个暂停设备重新启动 Digital-video, VCR, and waveform-audio
MCI_SAVE MCI_SAVE_PARMS 保存数据 Video-overlay and waveform-audio
MCI_SEEK MCI_SEEK_PARMS 更改媒体位置
MCI_SET MCI_SET_PARMS 设置设备信息
MCI_SETAUDIO MCI_GENERIC_PARMS 设置视频设备中的 audio 播放和捕捉的相关参数 用于Digital-video and VCR
MCI_SETTIMECODE MCI_GENERIC_PARMS 启用或取消VCR设备的时间码 用于 VCR
MCI_SETTUNER MCI_VCR_SETTUNER_PARMS 设置VCR设备频道
MCI_SETVIDEO MCI_GENERIC_PARMS 设置video参数 用于Digital-video and VCR
MCI_SIGNAL MCI_DGV_SIGNAL_PARMS 在工作区上设置指定空间 用于Digital-video
MCI_STATUS MCI_STATUS_PARMS 获取设备当前的相关状态信息,用于所有设备
MCI_STEP MCI_GENERIC_PARMS 使播放设备跳帧 Digital-video, VCR, and CAV-format videodisc
MCI_STOP MCI_GENERIC_PARMS 停止播放和录音 CD audio, digital-video, MIDI sequencer, videodisc, VCR, andwaveform-audio
MCI_SYSINFO MCI_SYSINFO_PARMS 返回MCI设备信息
MCI_UNDO MCI_GENERIC_PARMS 取消操作 如新近操作MCI_CUT, MCI_COPY, MCI_DELETE, or MCI_PASTE 等 用于Digital-video devices
MCI_UNFREEZE MCI_GENERIC_PARMS 让使用MCI_UNFREEZE的视频缓冲区恢复运动 Digital-video, VCR, and video-overlay
MCI_UPDATE MCI_GENERIC_PARMS 更新显示区域 Digital-video devices
MCI_WHERE MCI_GENERIC_PARMS 获取设备裁减矩形 Digital-video, and video-overlay devices
MCI_WINDOW MCI_GENERIC_PARMS 指定图形设备窗口和窗口特性 用于 Digital-video, and video-overlay devices

返回值

  • 0 — 执行成功
  • 错误代码(返回的DWORD值的低位字包含错误返回值。如果错误是特定于设备的,则返回值的高位字是驱动程序标识符;否则,高阶字为零。) — 执行错误

错误码获取

BOOL mciGetErrorString(DWORD fdwError,     // 函数mciSendString返回的错误码LPTSTR lpszErrorText,  // 接收描述错误的字符串的缓冲区UINT  cchErrorText   // 缓冲区的长度
);

easyx音乐播放器(转载)

这边介绍一个在easyx官网上看到的音乐播放器,附上网址:源代码链接

1、打开文件

bool MusicMCI::open(LPCWSTR strSongPath) noexcept
{MCI_OPEN_PARMS mciOP;mciOP.lpstrDeviceType = nullptr;mciOP.lpstrElementName = strSongPath;if (0 == mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_WAIT | MCI_OPEN_SHAREABLE, (DWORD_PTR)(static_cast<LPVOID>(&mciOP)))){nDeviceID = mciOP.wDeviceID;return true;}else{nDeviceID = -1;return false;}
}

2、播放

bool MusicMCI::play() noexcept
{MCI_PLAY_PARMS mciPP{};if (0 == mciSendCommand(nDeviceID, MCI_PLAY, MCI_NOTIFY, (DWORD_PTR)(static_cast<LPVOID>(&mciPP)))){return true;}else{return false;}
}

3、暂停

bool MusicMCI::pause() noexcept
{MCI_GENERIC_PARMS mciGP{};if (0 == mciSendCommand(nDeviceID, MCI_PAUSE, MCI_NOTIFY | MCI_WAIT, (DWORD_PTR)(static_cast<LPVOID>(&mciGP)))){return true;}else{return false;}
}

4、停止

bool MusicMCI::stop() noexcept
{MCI_SEEK_PARMS mciSP{};if (0 == mciSendCommand(nDeviceID, MCI_SEEK, MCI_WAIT | MCI_NOTIFY | MCI_SEEK_TO_START, (DWORD_PTR)(static_cast<LPVOID>(&mciSP)))){return true;}else{return false;}
}

5、关闭

bool MusicMCI::close() noexcept
{MCI_GENERIC_PARMS mciGP{};if (0 == mciSendCommand(nDeviceID, MCI_CLOSE, MCI_NOTIFY | MCI_WAIT, (DWORD_PTR)(static_cast<LPVOID>(&mciGP)))){nDeviceID = -1;return true;}else{return false;}
}

6、获取当前播放时间

bool MusicMCI::getCurrentTime(DWORD& pos) noexcept
{MCI_STATUS_PARMS mciSP{};mciSP.dwItem = MCI_STATUS_POSITION;if (0 == mciSendCommand(nDeviceID, MCI_STATUS, MCI_STATUS_ITEM, (DWORD_PTR)(static_cast<LPVOID>(&mciSP)))){pos = static_cast<DWORD>(mciSP.dwReturn);return true;}else{pos = 0;return false;}
}

7、获取音乐总时长

bool MusicMCI::getTotalTime(DWORD& time) noexcept
{MCI_STATUS_PARMS mciSP{};mciSP.dwItem = MCI_STATUS_LENGTH;if (0 == mciSendCommand(nDeviceID, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM, (DWORD_PTR)(static_cast<LPVOID>(&mciSP)))){time = static_cast<DWORD>(mciSP.dwReturn);return true;}else{time = 0;return false;}
}

8、设置音量大小

bool MusicMCI::setVolume(size_t nVolumeValue) noexcept
{if (nVolumeValue > 1000){nVolumeValue = 1000;}else if (nVolumeValue < 0){nVolumeValue = 0;}MCI_DGV_SETAUDIO_PARMS mciDSP;mciDSP.dwItem = MCI_DGV_SETAUDIO_VOLUME;mciDSP.dwValue = static_cast<DWORD>(nVolumeValue);if (0 == mciSendCommand(nDeviceID, MCI_SETAUDIO, MCI_DGV_SETAUDIO_VALUE | MCI_DGV_SETAUDIO_ITEM, (DWORD_PTR)(static_cast<LPVOID>(&mciDSP)))){return true;}else{return false;}
}

9、设置播放位置

bool MusicMCI::setStartTime(size_t start_time) noexcept
{DWORD end_time = 0;this->getTotalTime(end_time);if (start_time > end_time){return false;}MCI_PLAY_PARMS mciPlay{};mciPlay.dwFrom = static_cast<DWORD>(start_time);mciPlay.dwTo = static_cast<DWORD>(end_time);if (0 == mciSendCommand(nDeviceID, MCI_PLAY, MCI_TO | MCI_FROM, (DWORD_PTR)(static_cast<LPVOID>(&mciPlay)))){return true;}else{return false;}
}

踩过的坑

  1. 头文件顺序错误

    #include <mmsystem.h>
    #include <Windows.h>
    

    错误信息:

    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(94): error C2061: 语法错误: 标识符“MMVERSION”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(94): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(98): error C2061: 语法错误: 标识符“MMRESULT”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(98): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(102): error C2061: 语法错误: 标识符“FAR”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(102): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(109): error C2061: 语法错误: 标识符“UINT”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(112): error C2061: 语法错误: 标识符“DWORD”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(113): error C2061: 语法错误: 标识符“sample”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(113): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(114): error C2061: 语法错误: 标识符“cb”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(114): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(115): error C2061: 语法错误: 标识符“ticks”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(115): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(120): error C2061: 语法错误: 标识符“BYTE”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(121): error C2061: 语法错误: 标识符“min”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(121): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(122): error C2061: 语法错误: 标识符“sec”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(122): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(123): error C2061: 语法错误: 标识符“frame”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(123): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(124): error C2061: 语法错误: 标识符“fps”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(124): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(125): error C2061: 语法错误: 标识符“dummy”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(125): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(127): error C2061: 语法错误: 标识符“pad”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(127): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(127): error C2059: 语法错误:“[”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(129): error C2059: 语法错误:“}”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(134): error C2061: 语法错误: 标识符“DWORD”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(135): error C2059: 语法错误:“}”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(136): error C2059: 语法错误:“}”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(137): error C2059: 语法错误:“}”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(297): error C2146: 语法错误: 缺少“)”(在标识符“DRVCALLBACK”的前面)
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(297): error C2061: 语法错误: 标识符“DRVCALLBACK”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(297): error C2059: 语法错误:“)”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(297): error C2146: 语法错误: 缺少“)”(在标识符“hdrvr”的前面)
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(297): error C2061: 语法错误: 标识符“hdrvr”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(297): error C2059: 语法错误:“,”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(299): error C2061: 语法错误: 标识符“FAR”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(299): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(301): error C2143: 语法错误: 缺少“{”(在“*”的前面)
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(37): error C2061: 语法错误: 标识符“MCIERROR”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(37): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(42): error C2061: 语法错误: 标识符“MCIDEVICEID”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(42): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(45): error C2143: 语法错误: 缺少“)”(在“*”的前面)
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(45): error C2143: 语法错误: 缺少“{”(在“*”的前面)
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(45): error C2059: 语法错误:“)”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(45): error C2146: 语法错误: 缺少“)”(在标识符“mciId”的前面)
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(45): error C2061: 语法错误: 标识符“mciId”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(45): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(45): error C2059: 语法错误:“,”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(51): error C2061: 语法错误: 标识符“MCIERROR”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(51): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(53): error C2061: 语法错误: 标识符“mciSendCommandA”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(53): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(54): error C2146: 语法错误: 缺少“)”(在标识符“mciId”的前面)
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(54): error C2061: 语法错误: 标识符“mciId”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(54): error C2059: 语法错误:“,”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(58): error C2059: 语法错误:“)”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(61): error C2061: 语法错误: 标识符“MCIERROR”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(61): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(63): error C2061: 语法错误: 标识符“mciSendCommandW”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(63): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(64): error C2146: 语法错误: 缺少“)”(在标识符“mciId”的前面)
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(64): error C2061: 语法错误: 标识符“mciId”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(64): error C2059: 语法错误:“,”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(68): error C2059: 语法错误:“)”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(76): error C2061: 语法错误: 标识符“MCIERROR”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(76): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(78): error C2061: 语法错误: 标识符“mciSendStringA”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(78): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(79): error C2146: 语法错误: 缺少“)”(在标识符“lpstrCommand”的前面)
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(79): error C2061: 语法错误: 标识符“lpstrCommand”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(79): error C2059: 语法错误:“,”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(83): error C2059: 语法错误:“)”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(86): error C2061: 语法错误: 标识符“MCIERROR”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(86): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(88): error C2061: 语法错误: 标识符“mciSendStringW”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(88): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(89): error C2146: 语法错误: 缺少“)”(在标识符“lpstrCommand”的前面)
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(89): error C2061: 语法错误: 标识符“lpstrCommand”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(89): error C2059: 语法错误:“,”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(93): error C2059: 语法错误:“)”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(101): error C2061: 语法错误: 标识符“MCIDEVICEID”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(101): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(103): error C2061: 语法错误: 标识符“mciGetDeviceIDA”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(103): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(104): error C2146: 语法错误: 缺少“)”(在标识符“pszDevice”的前面)
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(104): error C2061: 语法错误: 标识符“pszDevice”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(105): error C2059: 语法错误:“)”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(108): error C2061: 语法错误: 标识符“MCIDEVICEID”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(108): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(110): error C2061: 语法错误: 标识符“mciGetDeviceIDW”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(110): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(111): error C2146: 语法错误: 缺少“)”(在标识符“pszDevice”的前面)
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(111): error C2061: 语法错误: 标识符“pszDevice”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(112): error C2059: 语法错误:“)”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(120): error C2061: 语法错误: 标识符“MCIDEVICEID”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(120): error C2059: 语法错误:“;”
    1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(120): fatal error C1003: 错误计数超过 100;正在停止编译
    
  2. 文件名中有空格
    比如说:音乐名字从AAA-恋音と雨空.mp3变成AAA- 恋音と雨空.mp3
    代码变成MymciSendString("open AAA- 恋音と雨空.mp3 alias BackMusic", NULL);
    不会报错,但是播放没有声音,应该是因为命令之间是用空格隔开的,所以不符合解析格式,所以没声音。

  3. 在其他编译器使用这两个函数(以DEV举例)
    编译mciSendString报错信息:

    原因是#pragma comment(lib, “Winmm.lib”) 微软自家vc 编译器cl.exe专有 宏指令,别家的不认。
    解决方法:自己添加链接

百度云链接

链接:https://pan.baidu.com/s/1EzgYMHxCUnI4JFco1Tc_YA
提取码:06av

c/c++播放音乐(PlaySound、mciSendString、mciSendCommand)相关推荐

  1. C# mciSendString()实现循环播放音乐

    声明这是 微软论坛上看的. 我看了很多人都在查找C#   mciSendString()循环播放音乐 学英语重要呀. using System; using System.Runtime.Intero ...

  2. mciSendString函数简介(播放音乐以及录音相关操作)

    函数功能:播放多媒体音乐,视频等 mciSendString是用来播放多媒体文件的API指令,可以播放MPEG,AVI,WAV,MP3,等等.这个函数有自己的mci指令,可以通过不同的指令实现不同的功 ...

  3. C++ 在多线程中使用mciSendString播放音乐 下篇

    首先: 我还是一个多线程编程的新手,用的方法可能有不妥当的地方,有不足之处还望各位包涵. 通过上一篇,咱们已经对mciSendString在多线程中的使用要点有了一个初步认识,接下来该解决线程间信息传 ...

  4. playsound播放中文名歌曲时,可以在歌曲名中加上空格正常播放音乐

    突发奇想做个音乐模块,找了半天发现playsound非常好用,只要playsound("正确的音乐路径")就可以播放音乐,然而当上手的时候发现歌曲名不支持中文 playsound( ...

  5. c并非所有的代码路径都返回值_两行C语言代码播放音乐,就这么so easy!你学到了吗?...

    函数介绍 为了实现用C语言播放音乐,我们需要用到windows的一个API,mciSendString. 函数原型为: MCIERROR mciSendStringA( LPCSTR lpstrCom ...

  6. VS中如何导入并且播放音乐

    用到的函数 PlaySound 所需头文件 #include<windows.h>#include<mmsystem.h>#pragma comment(lib,"w ...

  7. 五分钟让你的C语言播放音乐

    文章目录 前言 一.mciSendString函数 官方枯燥解释: 说人话: 二.上代码 1.必要的头文件和预处理 #include 前言 播放windows的一个API函数有两个PlaySound和 ...

  8. C语言播放音乐的两种方式

    来源:微信公众号「编程学习基地」 文章目录 播放音乐的两种格式 播放音乐的两种格式 wav格式的音乐播放.mp3格式的音乐播放 1️⃣首先添加播放音乐的头文件 #include <windows ...

  9. 用C语言实现控制台播放音乐的功能

      这个C程序当初搞了好久,从网上各种搜索教程,但是网上找的代码都不行,始终播放不了音乐,最后才发现是自己音乐格式的问题,从网易,qq音乐等等音乐软件里下载的MP3格式音乐并不是真正的MP3,而常用的 ...

最新文章

  1. H.265视频编码与技术全析(上)
  2. uniapp可以封装组件嘛_uniapp聊天App实例|vue+uniapp仿微信界面|红包|朋友圈
  3. 计算机中有关数及编码的知识,计算机中有关数及编码的知识
  4. [转载] Java中的命名参数
  5. 字符串的模式匹配--BF算法KMP算法
  6. 【计算机网络】计算机网络体系结构
  7. 怎样在vrep child scirpt里定义自己写的函数
  8. 熬夜整理了免费的数据源网站大全,再也不愁找不到数据练手
  9. 为什么软件开发方法论让你觉得糟糕?
  10. win10同步服务器文件夹,和彩云如何设置同步文件夹?
  11. 三方演化博弈复制动态方程matlab仿真(输入参数较多时)——matlab2016a版本
  12. python多条件选股_通达信几种实用的条件选股公式,一旦掌握,至少翻翻!
  13. 在已有win7系统的基础上重装win10系统
  14. 4199病毒如何清除
  15. bugku CTF杂项wp(1)
  16. android 锁屏代码分析,Android锁屏状态下的安全分析
  17. 排序算法:(二)快速排序
  18. 我最欣赏的一句话:天道酬勤
  19. springboot整合mail邮箱
  20. CUDA out of memory怎么解决

热门文章

  1. 第一定律VR助力马克思主义学院完成高校思政课改
  2. 阿里无影云电脑是什么?现在哪个云电脑更好用?
  3. 回溯法采用的搜索策略_五大常用算法之四:回溯法
  4. 读《筚路蓝缕——世纪工程决策建设记述》II
  5. oracle 表空间文件达到32G后解决办法
  6. 前端中的hack是什么意思?常见的hack技术以及以及hack技术的利弊
  7. aix oracle扩容裸lv,aix下扩展lv注意事项
  8. Centos下netstat的使用
  9. stm32h750/stm32h743原理图和pcb源文件
  10. 笔记本外接显示器,R7000