c/c++播放音乐(PlaySound、mciSendString、mciSendCommand)
文章目录
- 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;}
}
踩过的坑
头文件顺序错误
#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;正在停止编译
文件名中有空格
比如说:音乐名字从AAA-恋音と雨空.mp3
变成AAA- 恋音と雨空.mp3
代码变成MymciSendString("open AAA- 恋音と雨空.mp3 alias BackMusic", NULL);
不会报错,但是播放没有声音,应该是因为命令之间是用空格隔开的,所以不符合解析格式,所以没声音。在其他编译器使用这两个函数(以DEV举例)
编译mciSendString报错信息:
原因是#pragma comment(lib, “Winmm.lib”) 微软自家vc 编译器cl.exe专有 宏指令,别家的不认。
解决方法:自己添加链接
百度云链接
链接:https://pan.baidu.com/s/1EzgYMHxCUnI4JFco1Tc_YA
提取码:06av
c/c++播放音乐(PlaySound、mciSendString、mciSendCommand)相关推荐
- C# mciSendString()实现循环播放音乐
声明这是 微软论坛上看的. 我看了很多人都在查找C# mciSendString()循环播放音乐 学英语重要呀. using System; using System.Runtime.Intero ...
- mciSendString函数简介(播放音乐以及录音相关操作)
函数功能:播放多媒体音乐,视频等 mciSendString是用来播放多媒体文件的API指令,可以播放MPEG,AVI,WAV,MP3,等等.这个函数有自己的mci指令,可以通过不同的指令实现不同的功 ...
- C++ 在多线程中使用mciSendString播放音乐 下篇
首先: 我还是一个多线程编程的新手,用的方法可能有不妥当的地方,有不足之处还望各位包涵. 通过上一篇,咱们已经对mciSendString在多线程中的使用要点有了一个初步认识,接下来该解决线程间信息传 ...
- playsound播放中文名歌曲时,可以在歌曲名中加上空格正常播放音乐
突发奇想做个音乐模块,找了半天发现playsound非常好用,只要playsound("正确的音乐路径")就可以播放音乐,然而当上手的时候发现歌曲名不支持中文 playsound( ...
- c并非所有的代码路径都返回值_两行C语言代码播放音乐,就这么so easy!你学到了吗?...
函数介绍 为了实现用C语言播放音乐,我们需要用到windows的一个API,mciSendString. 函数原型为: MCIERROR mciSendStringA( LPCSTR lpstrCom ...
- VS中如何导入并且播放音乐
用到的函数 PlaySound 所需头文件 #include<windows.h>#include<mmsystem.h>#pragma comment(lib,"w ...
- 五分钟让你的C语言播放音乐
文章目录 前言 一.mciSendString函数 官方枯燥解释: 说人话: 二.上代码 1.必要的头文件和预处理 #include 前言 播放windows的一个API函数有两个PlaySound和 ...
- C语言播放音乐的两种方式
来源:微信公众号「编程学习基地」 文章目录 播放音乐的两种格式 播放音乐的两种格式 wav格式的音乐播放.mp3格式的音乐播放 1️⃣首先添加播放音乐的头文件 #include <windows ...
- 用C语言实现控制台播放音乐的功能
这个C程序当初搞了好久,从网上各种搜索教程,但是网上找的代码都不行,始终播放不了音乐,最后才发现是自己音乐格式的问题,从网易,qq音乐等等音乐软件里下载的MP3格式音乐并不是真正的MP3,而常用的 ...
最新文章
- H.265视频编码与技术全析(上)
- uniapp可以封装组件嘛_uniapp聊天App实例|vue+uniapp仿微信界面|红包|朋友圈
- 计算机中有关数及编码的知识,计算机中有关数及编码的知识
- [转载] Java中的命名参数
- 字符串的模式匹配--BF算法KMP算法
- 【计算机网络】计算机网络体系结构
- 怎样在vrep child scirpt里定义自己写的函数
- 熬夜整理了免费的数据源网站大全,再也不愁找不到数据练手
- 为什么软件开发方法论让你觉得糟糕?
- win10同步服务器文件夹,和彩云如何设置同步文件夹?
- 三方演化博弈复制动态方程matlab仿真(输入参数较多时)——matlab2016a版本
- python多条件选股_通达信几种实用的条件选股公式,一旦掌握,至少翻翻!
- 在已有win7系统的基础上重装win10系统
- 4199病毒如何清除
- bugku CTF杂项wp(1)
- android 锁屏代码分析,Android锁屏状态下的安全分析
- 排序算法:(二)快速排序
- 我最欣赏的一句话:天道酬勤
- springboot整合mail邮箱
- CUDA out of memory怎么解决