D5+FMP,我将点中的歌名放入一个List中,想挨个播放,但不知怎样一首接一首的播放?(100分)

  • 主题发起人 主题发起人 hiphis
  • 开始时间 开始时间
H

hiphis

Unregistered / Unconfirmed
GUEST, unregistred user!
我用 D5 + reelmagic +FMP 开发.
请问:
我将点中的歌名放入一个List中,想挨个播放,但不知怎样一首接一首的播放?
并且在播放的同时还要能点歌,是不是要用到多线程?

急煞我了,谢谢!!!!!!!!!!!!!
 
没有人会?呜--------
 
我很关注你的问题
 
我有个思路,你可以每播放一首之前,都取出其长度(如4分50秒),然后用Timer计时,到
时间后负责播放下一首歌,如此循环进行下去。
 
With Mediapayer1do
begin

if Notify and (Mode=Mpstopped)
then

begin

next......;
end;

寫在Notify事件中!
 
SPYSKY:
用MediaPlayer就简单罗!他好像是用专门的视频解压卡啊!
 
我用的是神龙DVD解压卡,realmagic API FMP.

并且在播放的同时还要能点歌,是不是要用到多线程?[这个]多线程该怎么写?(一般的多线程我会)
 
写FMPCallBack函数
function MyCallBackForStream(bMsg, hMPEGStream: BYTE;
dwValue: DWORD): Word;
begin

case bMsg of
FMP_FMPM_COMPLETED: if dwValue = FMP_PLAY then
PlayNextSong;
//如果播放完毕,则播放下一首
...
end
end;

另外,点歌不用多线程,你在选歌时,它会自动播放的,你只管选好了。
 
点歌应该不需多线程,选歌的结果可以添加到TLIST中,
播放只管不停地从TLIST取歌名按次序播放好了,播放控制
赞成SPYSKY的做法
 
设置一个timer组件,在其中写入如下程序
if mediaplayer1.Position>=mediaplayer1.Length then

begin

if filenum=0 then
stopclick(sender)
else

begin

if fileindex=(filenum-1) then

begin

fileindex:=0;
if circulate then

play2click(sender)
else

stopclick(sender);
end
else

begin

fileindex:=fileindex+1;
play2click(sender);
end;

listbox1.ItemIndex:=fileindex;
end;

end;



procedure TForm1.play2Click(Sender: TObject);
begin

timer2.Enabled:=false;
trackbar3.Enabled:=false;
mediaplayer1.Close;
MediaPlayer1.FileName:=listbox1.Items[fileindex];
Mediaplayer1.Open;
trackbar1.Enabled:=true;
trackbar2.Enabled:=true;
timer1.Enabled:=true;
trackbar3.Enabled:=true;
timer2.Enabled:=true;
trackbar3.Max:=MediaPlayer1.Length div 1000;
label3.Caption:=filetoname(MediaPlayer1.FileName);
label4.Caption:=lengthtotime( mediaplayer1.Length div 1000);
label10.Caption:=label3.Caption+'('+label4.Caption+')';
label5.Caption:='0:00';
label6.Caption:='0:00(分:秒)';
label7.Caption:=lengthtotime( mediaplayer1.Length div 2000);
Mediaplayer1.Play;

Play.Enabled:=false;
Pause.Enabled:=true;
Rewind.Enabled:=true;
Stop.Enabled:=true;
step.Enabled:=true;
back.Enabled:=true;
end;


其中,fileindex是播放文件索引号,circulate是循环播放标志

本人制作了一个mp3,wav 播放器,如有兴趣请与我联系!
e-mail:linglinuaa@163.net

 
将List中的歌曲名及路径读入到ListBox中,然后自己计算播放时事长度:

if MediaPlayer1.Position = MediaPlayer1.Length then

begin

if LoopStatus = False then

RandomMp3
else

LoopMp3;
end;
 
声明:不是用的MediaPlayer控件,而是用 神龙DVD卡+realmagic API(FMP).
 
设置一个timer组件,在其中写入如下程序
if FMPGET(hStream,FMPI_STM_MODE)= FMPF_STOP then

begin

FMPPLAYNEXT;

end
当你播歌的时候,播放这一块已经交给了解压卡,所以无需多线程。
 
加Timer控件 或是 用回调函数,哪个更好,更合理呢?
 
to:hiphis
回调函数受本身卡的影响很大,如果卡运行时间长了,万一程序出现异常,回调函数不一
定能捕捉到它,所以本人的意见是用TIMER较好。
 
谢谢各位大侠的热心帮助.现在就发分.

但我又有一个新的问题:FMP快进和倒退指令怎么用?谢谢.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
740
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部