大家来救急啊!一个关于连续播放wav的问题·!~~~~
我要连续播放wav文件,用循环在字符串中取字匹配wav文件名,用mediaplayer的,可是每次都只放最后一个声音,原因是刚放声音循环又取得下一个文件名,第一个声音还没有放就放下一个拉!我在循环前加判断也不行,大家帮我看看!谢谢!分不够再加!~~部分原码如下:
procedure TForm1.Button1Click(Sender: TObject);
var h,s,a:string; sStr:string; x,i:integer;
bChina:Boolean;
procedure Sing(sStr:String); //产生声音
var sWav:String;
begin
sWav:='mus\wav_'+sStr+'.wav';
if sStr='' then exit;
try
if ((sStr=' ') or (sStr=',') or (sStr='.') or (sStr=';') or (sStr='!')) then
begin
mediaplayer1.Close;
mediaplayer1.FileName:=apppath+'mus\wav_.wav';
mediaplayer1.Open;
mediaplayer1.play;
end //停止一会
else
begin
mediaplayer1.Close;
mediaplayer1.FileName:=apppath+sWav;
mediaplayer1.Open;
mediaplayer1.play;
end;
except
Showmessage('语音库中没有下列文件:wav_'+sStr+'.wav');
end;
end;
begin
a:=combobox3.Text;
i:=strtoint(a);
h:=combobox2.text;
s:=DBEdit1.Text+combobox2.text ;
end;
for x:=0 to i do
begin
sStr:=s;
bChina:=False;
while length(sStr)>0 do //判断文本是否结束
begin
s:='';
if ((Copy(sStr,1,1)='<') or (bChina=True)) and (Copy(sStr,1,1)<>'>') then //判断标识符
begin
bChina:=True;
if Copy(sStr,1,1)='<' then
sStr:=Copy(sStr,2,length(sStr));
s:=Copy(sStr,1,2);
sStr:=Copy(sStr,3,length(sStr));
end
else if (Copy(sStr,1,1)='>') or (bChina=False) then //判断标识符
begin
bChina:=False;
if Copy(sStr,1,1)='>' then
sStr:=Copy(sStr,2,length(sStr));
if Copy(sStr,1,1)<>'<' then
begin
s:=Copy(sStr,1,1);
sStr:=Copy(sStr,2,length(sStr));
end;
end;
Sing(s);
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Apppath:=ExtractFilepath(Application.ExeName);//获取当前的目录
if apppath[length(apppath)]<>'\' then
apppath:=apppath+'\';
end;
问题点数:0、回复次数:5Top
1 楼kaershaw(一苇渡江&&欲出江湖)回复于 2004-05-04 20:41:26 得分 0
你可以判断上一个文件是否播放完再播放下一个文件!
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
sleep(500);//主要其缓冲作用
with MediaPlayer1 do
begin
if notify And Chechbox1.Checked And//接受信息
(mode=mpStopped) then//已经停止
begin
ReWind;
play;
end;
notify:=true;//开始接受信息
end;
end;Top
2 楼mikechen1031(陈东)回复于 2004-05-05 10:16:06 得分 0
可是用sleep是放音时程序是僵死的啊!只有等放完音主界面才活啊!~~Top
3 楼songyangaaron(千里独行)回复于 2004-05-05 20:53:15 得分 0
试试PlaySound吧Top
4 楼mikechen1031(陈东)回复于 2004-05-06 14:26:43 得分 0
可是用PlaySound是放音时程序是僵死的啊!只有等放完音主界面才活啊!~~
Top
5 楼songyangaaron(千里独行)回复于 2004-05-09 22:15:30 得分 0
还真不是很简单哦,用多线程总可以了吧Top




