【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
在windows平台上面,开发音乐播放音乐不是一件很复杂的事情。当然,你如果需要自己进行音频的编解码工作,那还是有一些工作量的。事实上,如果我们只是用到播放音乐这个功能,比如写个小游戏、教育软件啥的,那么使用windows自带的API就可以实现这个目的。
1、添加多媒体库
#pragma comment(lib, "winmm.lib")
2、打开文件
MCI_OPEN_PARMS open_param;
open_param.lpstrElementName = _T("demo.mp3");
mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT, DWORD_PTR(&open_param));
3、带阻塞地播放音乐,也就是播放不结束函数不返回
MCI_PLAY_PARMS play_param;
mciSendCommand(open_param.wDeviceID, MCI_PLAY, MCI_WAIT, DWORD_PTR(&play_param));
4、非阻塞地播放音乐,也就是命令发送结束就返回
MCI_PLAY_PARMS play_param;
mciSendCommand(open_param.wDeviceID, MCI_PLAY, MCI_NOTIFY, DWORD_PTR(&play_param));
5、结束音乐播放
MCI_GENERIC_PARMS close_param;
mciSendCommand(open_param.wDeviceID, MCI_CLOSE, 0, DWORD_PTR(&close_param));
6、所有的多媒体子命令
/* MCI command message identifiers */
#define MCI_OPEN 0x0803
#define MCI_CLOSE 0x0804
#define MCI_ESCAPE 0x0805
#define MCI_PLAY 0x0806
#define MCI_SEEK 0x0807
#define MCI_STOP 0x0808
#define MCI_PAUSE 0x0809
#define MCI_INFO 0x080A
#define MCI_GETDEVCAPS 0x080B
#define MCI_SPIN 0x080C
#define MCI_SET 0x080D
#define MCI_STEP 0x080E
#define MCI_RECORD 0x080F
#define MCI_SYSINFO 0x0810
#define MCI_BREAK 0x0811
#define MCI_SAVE 0x0813
#define MCI_STATUS 0x0814
#define MCI_CUE 0x0830
#define MCI_REALIZE 0x0840
#define MCI_WINDOW 0x0841
#define MCI_PUT 0x0842
#define MCI_WHERE 0x0843
#define MCI_FREEZE 0x0844
#define MCI_UNFREEZE 0x0845
#define MCI_LOAD 0x0850
#define MCI_CUT 0x0851
#define MCI_COPY 0x0852
#define MCI_PASTE 0x0853
#define MCI_UPDATE 0x0854
#define MCI_RESUME 0x0855
#define MCI_DELETE 0x0856
ps:
从前自己写代码过分关注技术本身,反而对场景和应用不是很在意。就像这音乐播放一样,如果只是使用,使用mci库函数早就足够了。如果还需要进一步分析编解码的话,可能就需要研究一下ffmpeg之类的开源软件了。