C
cyy-997
Unregistered / Unconfirmed
GUEST, unregistred user!
[?]各位大侠:
最近我自己开发了一个使用了Delphi的mediaplayer控件循环播放一系列声音列表的程序,
具体程序(mediaplayer操作部分)如下,在实际使用过程中,程序确实实现了循环
播放,但是问题是当程序运行了将近一个小时后,发现系统的运行速度变得非常慢,有
点象系统资源被耗尽的感觉,一个WAV读完后,要经过十几秒才播发列表中后一个WAV文
件,请问是什么原因,如能解答,真的是不胜感激,另外,如要实现相同的循环播放的
效果,能不能用API函数实现,麻烦给一下简单代码,这样做的话,是不是消耗系统资源
会少一点,再次衷心感谢您的帮助!!
源程序:
/////以下函数用于初始化MediaPlayer。
function TmainForm.Initplayer: Boolean;
var ErrorString:string;
begin
Result:=False;
try
MediaPlayer1.Close;
MediaPlayer1.Open;
MediaPlayer1.Notify:=True;
result:=true;
except
ErrorString:='系统出错:'+InttoStr(Error)+#13#10;
MessageDlg(ErrorString + MediaPlayer1.ErrorMessage,mtError,[mbOK],0);
end;
end;
procedure TmainForm.MediaPlayer1Click(Sender: TObject;
Button: TMPBtnType;
vardo
Default: Boolean);
begin
if Button=btStop then
begin
MediaPlayer1.Previous;
Gauge1.Progress:=0;
MediaPlayer1.EnabledButtons:=[btPlay];
MediaPlayer1.Notify:=false;
end
else
if Button=btPlay then
begin
InitialData;///用于初始化ListBox1的项目
SaveData;
///保存数据进数据库
DeleteData(ComboOrder.Text);///在数据库中删除指定数据
MediaPlayer1.FileName:=ListBox1.Items[ListBox1.ItemIndex];
if Initplayer then
begin
MediaPlayer1.EnabledButtons:=[btStop];
end;
///////油表用于指示声音列表的整体播发进程///
with gauge1do
begin
Maxvalue:=Listbox1.Items.Count;
Progress:=0;
end;
end;
end;
procedure TmainForm.MediaPlayer1Notify(Sender: TObject);
begin
if MediaPlayer1.Notify
///////当用下面一条判断语句时,MediaPlayer很容易中途停止播放,不再继续播发,故
///////改用上面的判断语句,不知是否正确
{(MediaPlayer1.NotifyValue=nvSuccessful) and (MediaPlayer1.Mode=mpStopped)}
then
begin
MediaPlayer1.Previous;
////下面语句用于循环读取列表中的数据,给MediaPlayer的FileName赋值
if ((Listbox1.ItemIndex+1)<(listbox1.Items.Count)) then
begin
Listbox1.ItemIndex:=Listbox1.ItemIndex+1;
Gauge1.Progress:=Gauge1.Progress+1;
end
else
begin
Listbox1.ItemIndex:=0;
Gauge1.Progress:=0
end;
MediaPlayer1.FileName:=Listbox1.Items[Listbox1.itemindex];
if Initplayer then
begin
MediaPlayer1.EnabledButtons:=[btStop];
MediaPlayer1.Play;
end;
end;
end;
//////////各位大侠如需要更详尽情况,劳繁联系我 Cyy-997@263.net /////////
最近我自己开发了一个使用了Delphi的mediaplayer控件循环播放一系列声音列表的程序,
具体程序(mediaplayer操作部分)如下,在实际使用过程中,程序确实实现了循环
播放,但是问题是当程序运行了将近一个小时后,发现系统的运行速度变得非常慢,有
点象系统资源被耗尽的感觉,一个WAV读完后,要经过十几秒才播发列表中后一个WAV文
件,请问是什么原因,如能解答,真的是不胜感激,另外,如要实现相同的循环播放的
效果,能不能用API函数实现,麻烦给一下简单代码,这样做的话,是不是消耗系统资源
会少一点,再次衷心感谢您的帮助!!
源程序:
/////以下函数用于初始化MediaPlayer。
function TmainForm.Initplayer: Boolean;
var ErrorString:string;
begin
Result:=False;
try
MediaPlayer1.Close;
MediaPlayer1.Open;
MediaPlayer1.Notify:=True;
result:=true;
except
ErrorString:='系统出错:'+InttoStr(Error)+#13#10;
MessageDlg(ErrorString + MediaPlayer1.ErrorMessage,mtError,[mbOK],0);
end;
end;
procedure TmainForm.MediaPlayer1Click(Sender: TObject;
Button: TMPBtnType;
vardo
Default: Boolean);
begin
if Button=btStop then
begin
MediaPlayer1.Previous;
Gauge1.Progress:=0;
MediaPlayer1.EnabledButtons:=[btPlay];
MediaPlayer1.Notify:=false;
end
else
if Button=btPlay then
begin
InitialData;///用于初始化ListBox1的项目
SaveData;
///保存数据进数据库
DeleteData(ComboOrder.Text);///在数据库中删除指定数据
MediaPlayer1.FileName:=ListBox1.Items[ListBox1.ItemIndex];
if Initplayer then
begin
MediaPlayer1.EnabledButtons:=[btStop];
end;
///////油表用于指示声音列表的整体播发进程///
with gauge1do
begin
Maxvalue:=Listbox1.Items.Count;
Progress:=0;
end;
end;
end;
procedure TmainForm.MediaPlayer1Notify(Sender: TObject);
begin
if MediaPlayer1.Notify
///////当用下面一条判断语句时,MediaPlayer很容易中途停止播放,不再继续播发,故
///////改用上面的判断语句,不知是否正确
{(MediaPlayer1.NotifyValue=nvSuccessful) and (MediaPlayer1.Mode=mpStopped)}
then
begin
MediaPlayer1.Previous;
////下面语句用于循环读取列表中的数据,给MediaPlayer的FileName赋值
if ((Listbox1.ItemIndex+1)<(listbox1.Items.Count)) then
begin
Listbox1.ItemIndex:=Listbox1.ItemIndex+1;
Gauge1.Progress:=Gauge1.Progress+1;
end
else
begin
Listbox1.ItemIndex:=0;
Gauge1.Progress:=0
end;
MediaPlayer1.FileName:=Listbox1.Items[Listbox1.itemindex];
if Initplayer then
begin
MediaPlayer1.EnabledButtons:=[btStop];
MediaPlayer1.Play;
end;
end;
end;
//////////各位大侠如需要更详尽情况,劳繁联系我 Cyy-997@263.net /////////