⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 013.htm

📁 Delphi书籍--Delphi网上教程
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0043)http://hub.myrice.com/delphizt/dmtl/013.htm -->
<HTML><HEAD><TITLE>-->DELPHI专题--多媒体类-->使用DELPHI实现文本文件显示和声音同步播放</TITLE>
<META content="text/html; charset=GB2312" http-equiv=Content-Type>
<META content=" DELPHI专题--多媒体类 使用DELPHI实现文本文件显示和声音同步播放" name=keywords>
<META content=" - DELPHI专题--多媒体类 - 使用DELPHI实现文本文件显示和声音同步播放" name=description>
<STYLE>#page {
	LEFT: 0px; POSITION: absolute; TOP: 0px
}
.tt3 {
	FONT: 9pt/12pt "宋体"
}
.tt2 {
	FONT: 12pt/15pt "宋体"
}
A {
	TEXT-DECORATION: none
}
A:hover {
	COLOR: blue; TEXT-DECORATION: underline
}
</STYLE>

<META content="Microsoft FrontPage 4.0" name=GENERATOR></HEAD>


<a href="index.html">返回</a>







<BODY aLink=#9900ff bgColor=#ffffff leftMargin=3 link=#006699 text=#000000 
topMargin=3 vLink=#006699 marginwidth="3" marginheight="3">



<TABLE border=0 cellPadding=10 cellSpacing=0 width="100%">
  <TBODY>
  <TR>

    <TD bgColor=#f5f8f8 class=tt2 width="84%">
      <CENTER><B><FONT color=#ff6666 face=楷体_GB2312 
      style="FONT-SIZE: 16.5pt">使用DELPHI实现文本文件显示和声音同步播放</FONT></B></CENTER>
      <HR color=#ee9b73 SIZE=1 width="94%">
       
      <P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 
      在一些语言教学软件中,经常使用文本显示和声音同步播放,我们可以用DEL PHI实现之。 </SPAN></P> 
      <P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 
      <B>一、材料的制作</B> </SPAN></P> 
      <P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 
      首先,我们选择几篇文章,这里我们选择马丁路德金、林肯和里根的演说,每一篇文章分为若干句,在制作声音文件时,记下每个句子的开始时间和结束时间,然后将其记到一个数据表中,这个表有如下字段:NO、TEXT、STARTTIME,分别表示每句序号、内容、开始时间。  
      </SPAN></P>
      <P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> <B>二、  
      界面的制作</B> </SPAN></P>
      <P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 
      在DELPHI中创建一个新工程,在FORM中放入多媒体控件,RTF编辑器,命令按钮,单选分组框,数据表,时钟和标签,如图所示 </SPAN></P> 
      <P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 
      <B>三、各个控件的属性</B> </SPAN></P> 
      <P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 1、  
      多媒体控件的AutoEnable和AutoOpen特性设置为False  
      ,VisibleButtons特性设置Record、Eject、Step为不可见。 </SPAN></P>
      <P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 2、  
      Table控件的DatabaseName设为存放表的目录,我们将应用程序、声音文件和表存放在myprog目录,因此这里将DatabaseName设为c:\myprog,将TableName设为默认的播放文件对应的数据表的名字,这里设为ex1.dbf。 
      </SPAN></P>
      <P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 3、  
      Radiogroup控件的Caption设为 ‘请选择播放内容’,Itmes特性中加上三行:马丁路德金,林肯,里根。 </SPAN></P> 
      <P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 4、  
      Richedit控件的Lines特性加上‘演讲内容。 </SPAN></P>
      <P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 
      <B>四、代码的编写</B> </SPAN></P> 
      <P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 1、变量声明  
      </SPAN></P><BR><PRE><SPAN style="FONT-SIZE: 9pt">
var       isend:Boolean;
CurrentButton:TMPBtnType;
CurrentPlay,CurrentDisp:longint;
</SPAN></PRE>
      <P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 
      其中isend表示播放是否已经到了末尾,CurrentButton表示当前MediaPlayer元件中按下了哪个按钮,CurrentPlay  
      ,CurrentDisp表示当前播放记录及当前显示记录。 </SPAN></P>
      <P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 
      2、在FormCreate事件中做一些必要的准备工作,其代码如下: </SPAN></P><BR><PRE><SPAN style="FONT-SIZE: 9pt">
procedure TForm1.FormCreate(Sender: TObject);
begin
Table1.TableName:='ex1.dbf';   Table1.Open;
MediaPlayer1.FileName:='ex1.wav';MediaPlayer1.Open;
	MediaPlayer1.TimeFormat:=tfMilliseconds;
isend:=False;
CurrentButton:=btStop;
CurrentDisp:=1;
CurrentPlay:=1;
end;


</SPAN></PRE> 
      <P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 
      3、在单选分组框中加进如下代码: </SPAN></P><BR><PRE><SPAN style="FONT-SIZE: 9pt">
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
MediaPlayer1.Close;   Table1.Close;
case radiogroup1.ItemIndex of
0:begin MediaPlayer1.FileName:='ex1.wav';
	Table1.TableName:='ex1.dbf';end;
1:begin MediaPlayer1.FileName:='ex2.wav';
	Table1.TableName:='ex2.dbf';end;
2:begin MediaPlayer1.FileName:='ex3.wav';
	Table1.TableName:='ex3.dbf'; end;
end;
Table1.Open; MediaPlayer1.Open;
end;
	
</SPAN></PRE> 
      <P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 
      4、为了适当修改MediaPlayer元件中各个按钮的功能,需要编写MediaPlayer元件的click事件的代码,主要是修改“快进”及“快退”的功能,使其每次移动一句,且移动后直接播放,而不用再按“播放”按钮。为达到这个功能,在过程的一开始,设置DoDefault参数为False,表示不执行默认的动作,在过程的中间部分,加上必要的处理,在过程的结束处,写上根据按下的按钮执行相应功能语句。  
      </SPAN></P><BR><PRE><SPAN style="FONT-SIZE: 9pt">
procedure TForm1.MediaPlayer1Click(Sender: TObject;
Button: TMPBtnType; var DoDefault: Boolean);
begin
DoDefault:=False;
with MediaPlayer1 do
begin
case  Button of
btPlay : begin
if isend=true then
begin
Table1.first;  Position:=start;
CurrentPlay:=1;  CurrentDisp:=1;
isend:=False;
RichEdit1.lines.clear; RichEdit1.lines.add
	('演讲内容');
end;
CurrentButton:=btPlay;
end;
btStop :  begin     CurrentButton:=btStop;
isend:=true;
	 end;
btpause:  if CurrentButton=btPlay then
CurrentButton:=btpause
else if CurrentButton=btpause then
CurrentButton:=btPlay;
btPrev: begin  CurrentButton:=btPrev;
Table1.Prior;
Position:=Table1.fieldvalues
['STARTTIME'];
CurrentButton:=btPlay;
end;
btBack:  begin  CurrentButton:=btBack;
Table1.first; Position:=start;
CurrentPlay:=1;
	CurrentDisp:=1;
RichEdit1.lines.clear;
RichEdit1.lines.add
	('演讲内容');
CurrentButton:=btPlay;
end;
btNext: begin  CurrentButton:=btNext;
Table1.Next;
Position:=Table1.fieldvalues
['STARTTIME'];
CurrentButton:=btPlay;
end;
end;
case  CurrentButton of
btPlay: Play;
btpause:pause;
btStop:Stop;
end;
end;
end;
	
</SPAN></PRE>
      <P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 
      5、为了能同步显示文本,需要编写定时器OnTime事件的代码,如果当前播放的时间超过了当前记录的开始时间,则设置CurrentPlay为当前记录号,如果CurrentPlay超过了CurrentDisp  
      ,则显示当前记录。 </SPAN></P><BR><PRE><SPAN style="FONT-SIZE: 9pt">
procedure TForm1.Timer1Timer(Sender: TObject);
begin
with MediaPlayer1 do
begin
if CurrentButton=btPlay  then
begin
if  not Table1.eof and (Position
	&gt;Table1.FieldValues['STARTTIME'])
then
begin  CurrentPlay:=Table1.recno;
if CurrentPlay &gt;=CurrentDisp then
begin
RichEdit1.Lines.add(Table1.fieldvalues['TEXT']);
CurrentDisp:=CurrentDisp+1;
end;
Table1.Next;
end;
if Table1.eof then
begin
CurrentButton:=btStop;
isend:=true;
end;
end;
end;
end;
</SPAN></PRE>
      <P><SPAN style="FONT-SIZE: 9pt"><FONT color=#ffffff>----</FONT> 
      注:在MediaPlayer的click事件中,使用了btPrev,btNext等常量,为了能够通过编译,在uses子句中需将ComCtrls放在mPlayer之前,以免引起冲突。  
      </SPAN></P>
      <HR color=#ee9b73 SIZE=1 width="94%">
    </TD>


</TR></TBODY></TABLE></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -