如何实现循环播放mp3音乐。

jim900os 2003-11-30 12:47:46
我曾用mci命令播放一个mp3格式的文件,屈指能播放一次,要实现循环播放只能加入一个循环while(..)使不断询问当前状况,一旦得知播放完毕就重新播放。可是加了这个循环却用了系统很多资源。即使新创建线程执行它也是效果不好,界面会一顿一顿的。
不知有什么好的办法实现循环播放。
大虾 麻烦指点指点小弟。
谢谢。
...全文
973 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanglh 2003-12-08
  • 打赏
  • 举报
回复
yifengling0(逸枫) 说的没错,只要在mciSendCommand加上窗口句柄,并在消息中加上MCI_NOTIFY就可以了,当播放完后会接收到MM_MCINOTIFY消息。
yifengling0 2003-12-08
  • 打赏
  • 举报
回复
以前写过,用MCI就可以放MP3当一个歌曲结束以后就会发一个消息给窗口,你就可以播放下一首歌了,手头没有代码,你可以查一下msdn里面有详细的说明!~

MM_MCINOTIFY 消息 其中的MCI_NOTIFY_SUCCESSFUL就是放完一首歌了!~

至于用MCI放MP3 上网搜索一下!~很多例子! 我以前就是看一个汇编写的代码改的
panzhaoping 2003-12-08
  • 打赏
  • 举报
回复
用active 空间啊
flyingviolin 2003-12-08
  • 打赏
  • 举报
回复
是啊,能给我发一份吗?
谢谢
wo_fei_fei_fei@163.com
glacierrr 2003-11-30
  • 打赏
  • 举报
回复
我不知道你用的什么函数,但BOOL sndPlaySound(LPCTSTR lpszSoundName, UINT fuSound );
的fuSound == SND_LOOP | SND_ASYNC的话,就可以循环播放了。(SND_LOOP :The sound plays repeatedly until sndPlaySound is called again with the lpszSoundName parameter set to NULL. You must also specify the SND_ASYNC flag to loop sounds. )
当然了,sndPlaySound功能有限,但其他相应的函数应该也可以循环播放的。
等我再好好看看mci.
flypiggy 2003-11-30
  • 打赏
  • 举报
回复
up 关注中!!!
yes2 2003-11-30
  • 打赏
  • 举报
回复
请问你是怎么询问当前状态的?怎么得知播放完毕的?
yintongshun 2003-11-30
  • 打赏
  • 举报
回复
我以前写的有你说的例子
jim900os 2003-11-30
  • 打赏
  • 举报
回复
有例子的发来研究一下,谢谢.
zjh21cnbox@sohu.com.
jim900os 2003-11-30
  • 打赏
  • 举报
回复
先:
unsigned long wLength;
MCI_STATUS_PARMS statusParms;
然后
mciPlayParms.dwFrom=0;
mciSendCommand(wDeviceID, MCI_PLAY,MCI_FROM, (DWORD)LPVOID) &mciPlayParms);
mciSendCommand(wDeviceID,MCI_SEEK,MCI_SEEK_TO_END,NULL);
statusParms.dwItem=MCI_STATUS_POSITION;
mciSendCommand(wDeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)(LPVOID)&statusParms);
wLength=statusParms.dwReturn;//-----得到结束的长度,
//----------------------------------------
最后可以用SetTimer(...)函数中加入
statusParms.dwItem=MCI_STATUS_POSITION;
mciSendCommand(wDeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)(LPVOID)&statusParms);
if(int(statusParms.dwReturn>=wLength)){
mciSendCommand(wDeviceID,MCI_SEEK,MCI_SEEK_TO_START,NULL);
mciSendCommand(wDeviceID, MCI_PLAY,MCI_FROM, (DWORD)(LPVOID) &mciPlayParms);
}

这样就实现了循环.不过效果不是很好.
希望能有感于参数象mci_loop可以实现,可惜还没找到.
上贴中的sndPlaySound播放WAVE格式以前试过可以,还不知可不可以播放mp3格式的,
还要在试试.

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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