资源大全 | 神秘文化 | 在线翻译 | QQ专区 | 视频教程 | 彩信频道 | 搜索引擎 | BT下载 |  | 网站地图
设为首页
加入收藏
联系站长
您现在的位置: 一百网络 >> 其他编程 >> Delphi编程 >> 文档正文
最近更新
普通文档 Together与Visual.Studi
普通文档 Together与Visual.Studi
普通文档 Together与Visual.Studi
普通文档 Delphi实现在数据库中存
普通文档 Delphi开发多媒体播放音
普通文档 开发工具大比拼之Visual
普通文档 Delphi串口通讯的监听
普通文档 Delphi中远程控制的实现
普通文档 利用Delphi编写Socket通
普通文档 利用Delphi开发网络数据
推荐文章
  • 此栏目下没有推荐文档
  • 使用DELPHI实现文本文件显示和声音同

    文章作者:佚名 录入时间:2006-6-2 来源:不详
    网站声明:本站的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出处和原始作者,文章版权归本网站与文章作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。


    在一些语言教学软件中,经常使用文本显示和声音同步播放,我们可以用DEL PHI实现之。

       一、材料的制作

       首先,我们选择几篇文章,这里我们选择马丁路德金、林肯和里根的演说,每一篇文章分为若干句,在制作声音文件时,记下每个句子的开始时间和结束时间,然后将其记到一个数据表中,这个表有如下字段:NO、TEXT、STARTTIME,分别表示每句序号、内容、开始时间。

       二、 界面的制作

       在DELPHI中创建一个新工程,在FORM中放入多媒体控件,RTF编辑器,命令按钮,单选分组框,数据表,时钟和标签,如图所示

       三、各个控件的属性

       1、 多媒体控件的AutoEnable和AutoOpen特性设置为False ,VisibleButtons特性设置Record、Eject、Step为不可见。

       2、 Table控件的DatabaseName设为存放表的目录,我们将应用程序、声音文件和表存放在myprog目录,因此这里将DatabaseName设为c:\myprog,将TableName设为默认的播放文件对应的数据表的名字,这里设为ex1.dbf。

       3、 Radiogroup控件的Caption设为 ‘请选择播放内容’,Itmes特性中加上三行:马丁路德金,林肯,里根。

       4、 Richedit控件的Lines特性加上‘演讲内容。

       四、代码的编写

       1、变量声明

    var isend:Boolean; CurrentButton:TMPBtnType; CurrentPlay,CurrentDisp:longint; 
       其中isend表示播放是否已经到了末尾,CurrentButton表示当前MediaPlayer元件中按下了哪个按钮,CurrentPlay ,CurrentDisp表示当前播放记录及当前显示记录。

       2、在FormCreate事件中做一些必要的准备工作,其代码如下:

    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;
       3、在单选分组框中加进如下代码:
    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:=ex av;
    Table1.TableName:=ex3.dbf;
    end;
    end;
    Table1.Open; MediaPlayer1.Open;
    end;
       4、为了适当修改MediaPlayer元件中各个按钮的功能,需要编写MediaPlayer元件的click事件的代码,主要是修改“快进”及“快退”的功能,使其每次移动一句,且移动后直接播放,而不用再按“播放”按钮。为达到这个功能,在过程的一开始,设置DoDefault参数为False,表示不执行默认的动作,在过程的中间部分,加上必要的处理,在过程的结束处,写上根据按下的按钮执行相应功能语句。
     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;
       5、为了能同步显示文本,需要编写定时器OnTime事件的代码,如果当前播放的时间超过了当前记录的开始时间,则设置CurrentPlay为当前记录号,如果CurrentPlay超过了CurrentDisp ,则显示当前记录。
    procedure TForm1.Timer1Timer(Sender: TObject); 
    begin with MediaPlayer1 do begin if CurrentButton=btPlay then begin if not Table1.eof and (Position $#@62;
    Table1.FieldValues[STARTTIME]) then begin CurrentPlay:=Table1.recno;
    if CurrentPlay $#@62;=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;
       注:在MediaPlayer的click事件中,使用了btPrev,btNext等常量,为了能够通过编译,在uses子句中需将ComCtrls放在mPlayer之前,以免引起冲突。

  • 上一篇文档:

  • 下一篇文档:
  •     查找更多“使用DELPHI实现文本文件显示和声音同”的内容  
    相关连接
  • 将Java程序变成Windows系统服务

  • 浅析Java多线程程序设计机制

  • Java初学者需掌握的30个基本概念(1)

  • JDBC 入门(1)

  • 面向Java程序员的Ajax:构建动态Java程序(1)