mciSendString播放MP3问题

柴西卡夫卡 2010-11-28 10:45:38
由于PlaySound只能放wav格式,所以用mciSendString播放Mp3音乐。但其中有个问题,就是我选完一首歌播放,再选另一首时两个就同时播放了,就是说不能异步,这个很尴尬。。有什么解决办法?
还有vc中能不能直接引入mp3的资源,还是说只能引入wav的??
...全文
1124 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
柴西卡夫卡 2010-11-29
  • 打赏
  • 举报
回复
哦,是我理解力差了,多谢你
向立天 2010-11-29
  • 打赏
  • 举报
回复
你播放一首歌之后再放另一首不就可以了
自己维护播放列表
然后mp3资源是可以导入的
可以按自定义资源处理
有兴趣的话可以参看这篇博客
http://blog.csdn.net/xianglitian/archive/2010/05/23/5618817.aspx
邓学彬 2010-11-29
  • 打赏
  • 举报
回复
3楼的太不会变通了,你稍微改一下2楼的代码就可以呀
CString strMusicFile=_T("C:\abc.mp3");
改成GetOpenFileName之后取到的文件名即可。

另外已经提示了,主要就是在strNamespace这个名称,你自己定义一个名称,需要播放新文件前先关闭上次播放的。

mciSendString (_T("close ") + strNamespace,NULL, 0, 0);//停止播放
fishion 2010-11-29
  • 打赏
  • 举报
回复
你先把前一个播放停止了再播放新的
柴西卡夫卡 2010-11-29
  • 打赏
  • 举报
回复
问题就在这,用户不可能非要等要一首放完再放另一首,他可能随时选择另一首播放,这是最基本的要求。我看了下你的处理方法过于复杂,我只是想异步播放就可以了
柴西卡夫卡 2010-11-28
  • 打赏
  • 举报
回复

if (GetOpenFileName(&ofn))

{
TCHAR cmd[1000];
TCHAR shortPath[1000];
GetShortPathName(szFile,shortPath,sizeof(shortPath));
wsprintf(cmd,"play %s repeat",shortPath);
mciSendString(cmd,"",0,NULL);

}

我是这样写的,用SDK实现,还有你的Mp3文件固定了,我要的自己选择的,有没有好的方法解决异步播放的问题?
邓学彬 2010-11-28
  • 打赏
  • 举报
回复
注意strNamespace参数定义,播放多个文件都用相同名称,就只有一首歌在播放,否则可以同时播放。
CString strMusicFile=_T("C:\abc.mp3");//MP3文件名
CString strNamespace=_T("Comet"); //自定义的一个名称
BOOL bLoop=TRUE; //是否循环
mciSendString (_T("open \"") +strMusicFile+_T("\" type MPEGVideo alias ")+strNamespace,NULL, 0, 0); // 打开
if (bLoop)
{
mciSendString (_T("play ") + strNamespace + _T(" repeat"),NULL, 0, 0);//循环播放
}else{
mciSendString (_T("play ") + strNamespace,NULL, 0, 0); //普通播放
}
mciSendString (_T("close ") + strNamespace,NULL, 0, 0);//停止播放
柴西卡夫卡 2010-11-28
  • 打赏
  • 举报
回复
没人回复。。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧