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

📄 delp010.html

📁 对于学习很有帮助
💻 HTML
字号:
<html><!-- #BeginTemplate "/Templates/fwolf001.dwt" -->
<head>
<!-- #BeginEditable "doctitle" --> 
<title>独孤之所 - 使用DELPHI实现文本文件显示和声音同步播放</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<!-- #EndEditable --> 
<style type="text/css">
<!--
body {  font-family: "宋体"; font-size: 9pt}
td {  font-family: "宋体"; font-size: 9pt}
a:hover {  text-decoration: underline}
a {  text-decoration: none}
input {  font-family: "宋体"; font-size: 9pt}
select {  font-family: "宋体"; font-size: 9pt}
-->
</style>
</head>


<body>
<!-- #BeginEditable "2%C7%F8" --> <!-- #EndEditable -->
<table width="584" border="0" align="center" cellspacing="1">
  <tr> 
    <td width="582"> <font color="#FF3333"> 
      <div align="center"> <!-- #EndEditable --></div>
      </font> </td>
  </tr>
  <tr> 
    <td width="582"> 
      <div align="center"><!-- #BeginEditable "%D7%F7%D5%DF" --><!-- #EndEditable --></div>
    </td>
  </tr>
  <tr> 
    <td width="582"><!-- #BeginEditable "%CE%C4%B1%BE%C7%F8" --> 
      <center>
        <font color="#0000c0"> <font color="#FF3333">使用DELPHI实现文本文件显示和声音同步播放</font><br>
        </font>南京动力专科学校 <br>
        朱群生 
      </center>
      <p><font color="#ffffff">----</font> 在一些语言教学软件中,经常使用文本显示和声音同步播放,我们可以用DEL  
        PHI实现之。  
      <p><font color="#ffffff">----</font> <b>一、材料的制作</b>  
      <p><font color="#ffffff">----</font> 首先,我们选择几篇文章,这里我们选择马丁路德金、林肯和里根的演说,每一篇文章分为若干句,在制作声音文件时,记下每个句子的开始时间和结束时间,然后将其记到一个数据表中,这个表有如下字段:NO、TEXT、STARTTIME,分别表示每句序号、内容、开始时间。  
      <p><font color="#ffffff">----</font> <b>二、 界面的制作</b>  
      <p><font color="#ffffff">----</font> 在DELPHI中创建一个新工程,在FORM中放入多媒体控件,RTF编辑器,命令按钮,单选分组框,数据表,时钟和标签,如图所示  
      <p><font color="#ffffff">----</font> <b>三、各个控件的属性</b>  
      <p><font color="#ffffff">----</font> 1、 多媒体控件的AutoEnable和AutoOpen特性设置为False  
        ,VisibleButtons特性设置Record、Eject、Step为不可见。  
      <p><font color="#ffffff">----</font> 2、 Table控件的DatabaseName设为存放表的目录,我们将应用程序、声音文件和表存放在myprog目录,因此这里将DatabaseName设为c:\myprog,将TableName设为默认的播放文件对应的数据表的名字,这里设为ex1.dbf。  
      <p><font color="#ffffff">----</font> 3、 Radiogroup控件的Caption设为 ‘请选择播放内容’,Itmes特性中加上三行:马丁路德金,林肯,里根。  
      <p><font color="#ffffff">----</font> 4、 Richedit控件的Lines特性加上‘演讲内容。  
      <p><font color="#ffffff">----</font> <b>四、代码的编写</b>  
      <p><font color="#ffffff">----</font> 1、变量声明  
      <pre>
   var       isend:Boolean;
   CurrentButton:TMPBtnType;
   CurrentPlay,CurrentDisp:longint;
</pre> 
      <font color="#ffffff">----</font> 其中isend表示播放是否已经到了末尾,CurrentButton表示当前MediaPlayer元件中按下了哪个按钮,CurrentPlay  
      ,CurrentDisp表示当前播放记录及当前显示记录。  
      <p><font color="#ffffff">----</font> 2、在FormCreate事件中做一些必要的准备工作,其代码如下:  
      <pre>
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;

</pre> 
      <font color="#ffffff">----</font> 3、在单选分组框中加进如下代码:  
      <pre>
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;
	
</pre> 
      <font color="#ffffff">----</font> 4、为了适当修改MediaPlayer元件中各个按钮的功能,需要编写MediaPlayer元件的click事件的代码,主要是修改“快进”及“快退”的功能,使其每次移动一句,且移动后直接播放,而不用再按“播放”按钮。为达到这个功能,在过程的一开始,设置DoDefault参数为False,表示不执行默认的动作,在过程的中间部分,加上必要的处理,在过程的结束处,写上根据按下的按钮执行相应功能语句。  
      <pre>
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;
	
</pre> 
      <font color="#ffffff">----</font> 5、为了能同步显示文本,需要编写定时器OnTime事件的代码,如果当前播放的时间超过了当前记录的开始时间,则设置CurrentPlay为当前记录号,如果CurrentPlay超过了CurrentDisp  
      ,则显示当前记录。  
      <pre>
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;
</pre> 
      <font color="#ffffff">----</font> 注:在MediaPlayer的click事件中,使用了btPrev,btNext等常量,为了能够通过编译,在uses子句中需将ComCtrls放在mPlayer之前,以免引起冲突。  
      <!-- #EndEditable --></td> 
  </tr> 
  <tr> 
    <td width="582"><!-- #BeginEditable "%B1%B8%D7%A2" --><!-- #EndEditable --></td> 
  </tr> 
</table> 
<br> 
</body> 
<!-- #EndTemplate --></html> 

⌨️ 快捷键说明

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