会者不难: 怎样用API来循环播放一首mp3 不能用TTimer来循环,我想用mciSendString,在网上找了一下也没有很好的答案。请高手指点一下,最好有代码,谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 方法如下:首先需要在uses部分加入mmsystem,接着写入下列语句,其中d:\onestop.mid 为播放的文件,NN为自定义名称标志,你可以注意到它前面的关键字aliasprocedure TForm1.Button1Click(Sender: Tobject);begin//播放音乐MCISendString('OPEN d:\onestop.mid TYPE SEQUENCER ALIAS NN', '', 0, 0);//'OPEN e:\1.MID TYPE SEQUENCER ALIAS NN' 注意 TYPE ALIAS这些关键词MCISendString('PLAY NN FROM 0', '', 0, 0);MCISendString('CLOSE ANIMATION', '', 0, 0);end;procedure TForm1.Button2Click(Sender: Tobject);begin//停止播放MCISendString('OPEN e:\1.MID TYPE SEQUENCER ALIAS NN', '', 0, 0);MCISendString('STOP NN', '', 0, 0);MCISendString('CLOSE ANIMATION', '', 0, 0);end; 拜托,不懂别乱答,PlaySound只播放wav的。 这里有个用VB循环播放的http://www.vbzx.net/ArticleView/vbzx_Article_View_239.asp to wudi_1982(︻┳═一)上面的delphi代码根本不能循环,你试过可以吗?VB的是循环播放全部文件的,不是单个文件,而且有些看不懂,麻烦翻译成delphi代码,谢谢。 上面的delphi代码根本不能循环,你试过可以吗?上面的代码只能播放。我没说可以循环。。循环的关键是你判断播放是否结束。给你的那个网址中,有关于这个判断的 好心帮你搞东东。还落下一身不是。郁闷。。好人做到底。。mciSendString("status " + Pathname + " position", Ret, 1024, 0)可以获得当前播放进度。而当音乐播放完毕时,Ret=0。应该知道了吧。。伙计。。 mciSendString第二个参数是pchar类型的,怎么会Ret=0,用判断进度的方法岂不是要用TTimer?我是想mciSendString有没有一个像PlaySound的SND_LOOP参数那样,能自动循环。唉,问个简单的问题也没人会。 播放完成后有mci_Notify_Successful消息 看了一下MPlayer.pas的源码,感觉用mciSendCommand会比较好,循环就是楼上说的截获MM_MCINOTIFY消息WParam = MCI_NOTIFY_SUCCESSFUL时,重新播放。代码如下,自己根据需要修改一下:uses MMSystem;private { Private declarations } procedure MMmciNotify(var Msg:TMessage);message MM_MCINOTIFY;var mciOpenParms: TMCI_Open_Parms; m_MCIDeviceID: MCIDEVICEID;procedure TForm1.Button1Click(Sender: TObject); //打开begin mciOpenParms.lpstrDeviceType := ''; mciOpenParms.lpstrElementName := 'c:\1.mp3'; mciSendCommand( 0 , MCI_OPEN , MCI_OPEN_ELEMENT , DWORD(@mciOpenParms) ); m_MCIDeviceID := mciOpenParms.wDeviceID;end;procedure TForm1.Button2Click(Sender: TObject); //播放var mciPlayParms: MCI_PLAY_PARMS; ret: integer;begin mciPlayParms.dwCallback := Form1.Handle; mciPlayParms.dwFrom := 0; ret := mciSendCommand( m_MCIDeviceID , MCI_PLAY , MCI_FROM or MCI_NOTIFY , integer(@mciPlayParms) );end;procedure TForm1.MMmciNotify(var Msg: TMessage);begin if Msg.WParam = MCI_NOTIFY_SUCCESSFUL then Button2.Click; //循环end; 深圳的哥们都进来啊。。。。有点事情想问一下 初学者请教:我现在在看书,调试书上的一些程序,但经常不知道书上提到的控件在哪一部分能找到,请问能有什么好办法可以快速找到想要的控 帮忙看看 急:Delphi7的CDkey是多少啊? 数据库的问题。 扫描得到的图片jpg格式的有200多K,能不能压缩变小一点啊?在线等待! 好困惑!!!! Borland的桌面数据database desktop每次退出都报错,是咋回事呢? 小问题:请问哪种图形控件可以显示jpg和ico等其它图象格式? “环保型”的无须安装软件怎么实现? 關於frdemo的問題!!! 连接问题
procedure TForm1.Button1Click(Sender: Tobject);
begin
//播放音乐
MCISendString('OPEN d:\onestop.mid TYPE SEQUENCER ALIAS NN', '', 0, 0);
//'OPEN e:\1.MID TYPE SEQUENCER ALIAS NN' 注意 TYPE ALIAS这些关键词
MCISendString('PLAY NN FROM 0', '', 0, 0);
MCISendString('CLOSE ANIMATION', '', 0, 0);
end;procedure TForm1.Button2Click(Sender: Tobject);
begin
//停止播放
MCISendString('OPEN e:\1.MID TYPE SEQUENCER ALIAS NN', '', 0, 0);
MCISendString('STOP NN', '', 0, 0);
MCISendString('CLOSE ANIMATION', '', 0, 0);
end;
http://www.vbzx.net/ArticleView/vbzx_Article_View_239.asp
上面的delphi代码根本不能循环,你试过可以吗?VB的是循环播放全部文件的,不是单个文件,而且有些看不懂,麻烦翻译成delphi代码,谢谢。
mciSendString("status " + Pathname + " position", Ret, 1024, 0)可以获得当前播放进度。而当音乐播放完毕时,Ret=0。
应该知道了吧。。伙计。。
我是想mciSendString有没有一个像PlaySound的SND_LOOP参数那样,能自动循环。唉,问个简单的问题也没人会。
{ Private declarations }
procedure MMmciNotify(var Msg:TMessage);message MM_MCINOTIFY;var
mciOpenParms: TMCI_Open_Parms;
m_MCIDeviceID: MCIDEVICEID;procedure TForm1.Button1Click(Sender: TObject); //打开
begin
mciOpenParms.lpstrDeviceType := '';
mciOpenParms.lpstrElementName := 'c:\1.mp3';
mciSendCommand(
0 ,
MCI_OPEN ,
MCI_OPEN_ELEMENT ,
DWORD(@mciOpenParms)
);
m_MCIDeviceID := mciOpenParms.wDeviceID;
end;procedure TForm1.Button2Click(Sender: TObject); //播放
var mciPlayParms: MCI_PLAY_PARMS;
ret: integer;
begin
mciPlayParms.dwCallback := Form1.Handle;
mciPlayParms.dwFrom := 0;
ret := mciSendCommand(
m_MCIDeviceID ,
MCI_PLAY ,
MCI_FROM or MCI_NOTIFY ,
integer(@mciPlayParms)
);
end;procedure TForm1.MMmciNotify(var Msg: TMessage);
begin
if Msg.WParam = MCI_NOTIFY_SUCCESSFUL then
Button2.Click; //循环
end;