以下是引用yu965634383在2017-10-17 00:39:29的发言:
MCIERROR mciError = mciSendStringA ("open C:\\Users\\yutang\\Desktop\\1.wav type avivideo alias mymusic" , buf1 , strlen (buf1) , NULL);//文件名有空格,则需要在路径的前后加上双引号的转义字符 \" ;
puts (buf1);
if (mciError)
{
mciGetErrorStringA (mciError , buf , strlen (buf));
MessageBoxA (NULL ,buf , "警告" , 1);
}
mciSendStringA ("play mymusic repeat" , NULL , 0 , NULL);
我在文件名后面加了个播放方式的指令,就是type avivideo 这个,它居然可以重复播放了,这不是用来播放视频的吗?
我还有个问题: 文件路径可不可以用一个变量来代替啊?
我打算将上面的代码包装起来,写成一个新的函数,而函数的参数就是文件的路径。这样我就可以播放很多歌曲了。我在网上查了很久,但是好像没有这方面的,好郁闷啊。
多谢经验分享
不要用strlen获取buf长度, strlen是以'\0'结束,只用来获取字符串长度,可用sizeof(buf)获取buf的大小。
文件名用字符串处理就可以,如:
MCIERROR mciPlay(char *szFileName)
{
char cmd[1024]={0};
sprintf(cmd, "%s%s%s", "open ", szFileName, " type avivideo alias mymusic");
MCIERROR mciError = mciSendStringA(cmd, NULL, 0, 0);
if (mciError)
return mciError;
return mciSendStringA("play mymusic repeat", NULL, 0, 0);
}
char *szFileName = "C:\\Users\\yutang\\Desktop\\1.wav";
MCIERROR mciError = mciPlay(szFileName);
[此贴子已经被作者于2017-10-17 09:16编辑过]