MID播放问题(50分)

  • 主题发起人 ilovedelphi3
  • 开始时间
I

ilovedelphi3

Unregistered / Unconfirmed
GUEST, unregistred user!
各位朋友,你们好!
能否给在下一个关于“一个MID文件播放完毕后,紧接着又播放
另一个MID文件”的例子程序?

多谢大家了!

 
var
midiname: integer;
procedure TForm1.button1click(sender: TObject);
begin

midiname := 1;
with mediaplayer1do

begin

notify := true;
devicetype := dtSequencer;
filename := inttostr(midiname)+'.mid';
play;
end;

end;


procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin

with mediaplayer1do

begin

inc(midiname);
if fileExists(inttostr(midiname+'.mid') then

begin

filename := inttostr(midiname)+'.mid';
nofity := true;
play;
end;

end;

end;
 
朋友,你好!
谢谢你个的程序。只是程序中的 filename := inttostr(midiname)+'.mid';
这句我不太明白意思,望解释下吧。
还有,我想用 sAppPath := ExtractFilePath(Application.ExeName);
mediaplayer1.filename := sAppPath + 'XXX.mid';
语句,但是我无法写程序,还望指定。
另外,您程序中好象少了OPEN语句。
 
inttostr(midiname)+'.mid';我只是假设你有一批midi文件名称叫1.mid, 2.mid, ...
只是说明用法, 并不是例子程序.

你的要求也很简单, 建一个const数组保存你需要播放的midi文件名. 然后设置一个索引变量, 每次
OnNofity时索引+1供下次检索需要播放的文件名(当然还得加上边界检查, 比如超过数组长度时
设置回1)
我原来就是用这方法放背景音乐的, 两段midi之间连接很光滑, 听不出停顿.(我后来还把midi放
进了exe文件)
 
我临时写了一个,已测试通过。
Var i:integer;

procedure TForm1.FormCreate(Sender: TObject);
begin

With listbox1.Itemsdo

Clear;
AddMidifile;

mediaplayer1.DeviceType:=dtAutoselect;
I:=0;
end;


procedure TForm1.AddMidiFile;
var Midifile:TSearchRec;
SPath:String;
begin

SPath:=ExtractfilePath(ParamStr(0));
if findFirst(sPath+'/*.mid',faAnyfile,midifile)=0 then

begin

listbox1.items.add(midifile.name);
while findnext(midifile)=0do

Add(Midifile.name)

findClose(MIdifile);
end;

end;


procedure TForm1.Button1Click(Sender: TObject);
begin

if i<=listbox1.Items.Count-1 then

listbox1.ItemIndex:=i
else
begin

MediaPlay1.Close;
exit;
end;

With MediaPlayer1do

begin

FileName:=listbox1.Items[listbox1.itemindex];
Open;
Play;
end;

end;


procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin

if MediaPlayer1.Mode=mpStopped then

begin

Inc(I);
Button1Click(Sender);
end;

end;


end.

这样有50分吗?
 
上面Addmidifile过程序中写错了一句,应为:
while findnext(midifile)=0do

listbox1.items.Add(Midifile.name);
 
你可以这样写:
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin

sAppPath := ExtractFilePath(Application.ExeName);
mediaplayer1.filename := sAppPath + '02.mid';
if MediaPlayer1.Mode=mpStopped then

begin

mediaplayer1.Open;
mediaplayer1.play;

end;

end;


procedure TForm1.FormActivate(Sender: TObject);
begin

sAppPath := ExtractFilePath(Application.ExeName);
mediaplayer1.filename := sAppPath + '01.mid';
mediaplayer1.Open
mediaplayer1.Play
end;

就可以实现文件连续播放啦!
 
多人接受答案了。
 
顶部