大家帮个忙啊!~~~~~~谢谢!!(0分)

  • 主题发起人 主题发起人 mike1031
  • 开始时间 开始时间
M

mike1031

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个连续播放wav的小程序,可是一点击按纽,主界面就死了,放完主界面才活
估计要多线程,时间紧,我又不会多线程!大家帮忙看看啊!!!还有什么办法解决啊??


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, DB,DBTables,mmsystem, Menus, DBCtrls,
Mask, ExtCtrls, ComCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;


var
Form1: TForm1;
procedure Sounding(sText:String;iNum:integer);
//sText:要播放的文本,iNum:该文本要播放的次数;
procedure GetSound(sText:String);
//获得声音,参数:stext:文本
var i:integer;
br:string;



implementation

{$R *.dfm}
procedure Sounding(sText:String;iNum:integer);
//sText:要播放的文本,iNum:该文本要播放的次数;
var i:integer;
//如:001号请到002号房间去
begin

for i:=0 to iNum-1do

GetSound(sText);
end;

procedure GetSound(sText:String);
//获得声音,参数:stext:文本
var sStr,s:string;
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

sndPlaySound('wav_.wav',SND_NODEFAULT) //停止一会
else

begin

sndPlaySound(PChar(sWav),SND_NODEFAULT)
end;

except
Showmessage('语音库中没有下列文件:wav_'+sStr+'.wav');
end;

end;

begin

sStr:=sText;
bChina:=False;
while length(sStr)>0do
//判断文本是否结束
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;



procedure TForm1.Button1Click(Sender: TObject);
begin

Sounding('337<号到>8<号房>',1);
//sText:要播放的文本,iNum:该文本要播放的次数;

end

end.


注:wav文件在mus的文件夹里!
 
把播放部分写到子线程中,创建线程可以这样:
======================================================定义部分
myT= class(TThread) //线程类
protected
procedure Execute;
override;
//线程体
end;


procedure myT.Execute;
//线程体
begin

FreeOnTerminate:=True;
//自动释放
。。。。//代码
end;

=====================================================然后
var myT1:myT;
myT1:=myT.Create(false);
 
给你的 sndPlaySound 加上这个参数 SND_ASYNC
 
后退
顶部