说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

使用DELPHI实现文本文件显示和声音同步播放

HTML文档下载 WORD文档下载 PDF文档下载
使用DELPHI实现文本文件显示和声音同步播放

---- 在一些语言教学软件中,经常使用文本显示和声音同步播放,我们可以用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:='ex3.wav';

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

>Table1.FieldValues['STARTTIME'])

then

begin CurrentPlay:=Table1.recno;

if CurrentPlay >=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之前,以免引起冲突。

直接开始用:5个免费的在线思维组织工具 招聘开发者常见的九大误区 开源影响销售,维护赞助商? 盘点黑客攻击途径:最常用的7个策略及简单的防护方法 专访AngularJS框架创始人Misko Hevery:让Web开发更便捷 果粉的又一个节日:新iPad或于10月22日发布 新车间李大维:到集装箱里来看创客嘉年华 亚马逊推“登录与支付”功能 直接冲击PayPal Google编程之夏新里程碑:5000万行源代码 8500名学生开发者 非常实用的15款开源PHP类库 Runnable:一站式代码片段服务平台,打造编程界的YouTube 谷歌向所有开发者开放Google App Engine PHP Runtime “沟通”电子表格和矢量图形的“桥梁”:在线可视化工具Raw Facebook北极圈数据中心,Open Compute Project的力作! 最后三天!4折抢购2013移动开发者大会门票 电子书追踪统计,App Annie for eBooks上线 先驱还是模仿者?细数海外移动应用推广平台 IDC:PC出货量下滑终于放缓 联想销量再次第一 为什么说,用一块屏幕玩游戏是远远不够的? 编写代码?先熟悉一下编程语言界限吧! Spanner vs. F1:谷歌两大数据管理利器的整体对比及关联 移动设计需摒弃的几大PC应用设计方法 响应式导航设计案例解析(多图) 所见即所得:七大无需编程的DIY开发工具 前Google员工发布无痕搜索产品,阻老东家财路 VMware推出vCloud Suite及vSphere新版:可用性及性能双丰收 TIOBE 2013年10月编程语言排行榜:Groovy首次挤进Top 20 Cookie时代将结束:微软将开发跨PC、移动和Xbox跟踪技术 Web设计里需要避免的八大糟糕趋势 Groupon从ROR迁移至Node.js,响应速度大幅提升 腾讯云的Container实现 createbitmap()里頭有五個參數,最後一個參數怎麽設置?我看了英文和中文的解釋都理解不了,誰能給個例子出來呀 如何添加自定义的ToolBar.怎样在命令菜单被check时随意显示和隐藏该工具条?急! 在线等,为什么我的代码原来可以运行,现在不可以了????TextPad 用GetCommandLine()得到的文件名是c:\test\YTEX~1.XY,而我的实际文件名是c:\test\y.txt.XY,我该怎么办? 急急急...为什么我拨号已经拨通了,但我还是打不开网页,ping各个网站也ping不通 各位前辈好.关于TCP/IP协议应用的问题,请大家指点. ***软件加密,急急急!!!请高手指教*** 寻找与CSDN类似的社区软件 谁有SCJP SL-275的原版电子版教材? 标准C程序中调用类的编译错误 access的mdb数据库如何编程知道里面含有那几个表? 谁有瑞星的升级程序,或是授权ID什么的?现在瑞星升级很烦啊!又是注册,又是授权的。 好象很少有人讨论日志文件的,能介绍点好的website吧(国内外均可)谢了先 Ghost之后,20G只剩下一个2G的C:!!!如何恢复,请指教,多谢!!! 我是初学者,问一个比较傻的问题:既然JAVA是一种纯面向对象的语言,那么为什么int i=new int()或int i=new int(1)不能通过编译?谢谢。 哪位能讲解一下,WEB服务器启动一个PHP 脚本的过程? 哪位朋友有没有做过让asp自动生成 Access数据库中的一张表 现想做一模块,主要是对股票数据在网络(包括公司内部网或是INTERNET)进行实时的发送; 关于DcomConnection的一个问题:连接局域网其他机器的应用程序服务器时“拒绝访问” 在VisData中正常通过,但在程序中不能通过,为什么 图像的小波分解和重构,模极大值算法。 师傅不在QQ,在这里吗?有个问题.//小新的徒弟. 老千,上次的那个rose下载网站,你还记得吗?偶忘了,搜索了几遍野没找到//牛虻 在VisData中正常通过但在程序中不能通过,为什么 向各位高手请教两句:tab_1.post selecttab(3) 的作用是不是向tab发送消息,消息内容是selecttab(3)?yield()是不是从消息中查找是否有相同消息,如果有则将它拿出执行? 我很莱,谁能给我简单的解释一下线程是什么?脱壳是什么? 图象资料,轻而易举30分! 和大家交流一下泛型化编程 文件拷贝的简单问题, 大家好:请问:access的mdb数据库如何编程知道里面含有那几个表? 怎样将mysql驱动加到jbuilder中,让Database pilot能认得出,高分相送 高分求教:关于ADO实现数据库!!!!!!!!!!谢谢 请问如何一次删除数据库中的所有数据? 怎么使label框透明!帮帮我! TNMUDP问题:怎样才能知道RemoteHost连接失败??? 谁有CuteFTP Pro2.0注册码?谢谢 如何进行DropDownList绑定,谢谢! 请问一个CString的问题 那个168查分台太可恶了 WIN98与WIN2000共享一个OFFICE??? 网络连接怎么检测 能把IE浏览器最大吗?俺指的是把右上最大按钮最大化? 怎么判断表单传送的整数中不能有字符,谢谢!!! 如何把我写好的说明书放到我VC++应用程序的帮助文件中? 求最容易理解,最容易上手的数据库书籍,各位老大请指教,谢谢!! 快!快快!!来拿分呀!!!!!!!!一个简单问题。 WIN98与WIN2000共享一个OFFICE 2000??? 在Servlet中如何使用JavaBean(调用其中的方法)?主要是格式!如果网上有这方面的资料也可以告诉我,我急用,不胜感激!40分送上!(只有这些了) 请问各位:怎样才能知道某一个进程所占用的cpu比例,mem大小? 请问在恢复sql 7.0一个数据库文件时,出现Error 3624:这是什么意思?? 关于程序员考试 如何控制一汽缸自动做往返运动?我想用一电路控制一汽缸自动做往返运动,另外还接一计数器,记录汽缸的运动次数,急求一电路图和电子元器件参数. 第二次世界大战的主要事件不要很长, 12、甲、乙两站相距440千米,一辆大车和一辆小车从两站相对开出,大车每小时行35千米,小车每小时行45千米12、甲、乙两站相距440千米,一辆大车和一辆小车从两站相对开出,大车每小时行35千 怎么区分电动车线路那些线是正极和负极线路想请问下电动车里面的线路那么多,怎么区分哪些是正极的,哪些又是负极的呢? 控制气缸自动往返运动需要什么配件?我现有的配件有空压机、气缸、二位五通电磁阀、磁性开关(接近开关)、软管,除了这些我还需要其他什么配件?最好有相关的安装视频,有视频的多加分 电磁阀4v210-08怎样安装使用,有哪位朋友知道电磁阀的进气口,出气口怎么样接的啊? 封冻的江河水面能够承受的最大压强是7x10的5次方Pa,一辆20t的坦克能够在冰面上行驶吗? 怎样增大或减小压强的方法?如下回答增大S一定,------FF一定,------S同时-----F和----S减小S一定,------FF一定,------S同时-----F和----S 中国在第二次世界大战中的地位 请问现在的汽车都装有汽车尾气净化器么?尤其是中国有没有装. 什么催化剂将挥发性尾气转化为二氧化碳 这种水质能当自来水用吗?洗澡有没有问题?铅含量比自来水高会怎么样?对皮肤有没有伤害?这种水 简述净化器是如何降低汽车尾气危害的 1.重力为20万牛的坦克,每条履带与地面的接触面积是2平方米.求:若某冰面能承受的最大压强为6*10的四次方帕,坦克能否直接通过这个冰面?2.一铁球挂在弹簧秤下,弹簧秤示数为3.92牛,将铁球完 第二次世界大战日本侵略中国是怎样呢和什么地方,帮忙一下,谢了啊! 光电开关,电磁阀,继电器,气缸.接在一起用光电开关感应物体,感应到物体气缸工作,物体离开气缸停止工作回到原来位置,循环工作. 重力为20万牛的坦克,每条履带与地面的接触面积是2米的平方.求:若某冰面能承受的最大压强为6乘10的4...重力为20万牛的坦克,每条履带与地面的接触面积是2米的平方.求:若某冰面能承受的 做矿泉水主要用到什么设备 催化式排气净化器如何降低尾气危害 磁性开关怎么控制旋转气缸旋转气缸可以用磁性开关来保证位置么? 普通的气缸可以夹装在气缸的两头,旋转怎么夹? 第二次世界大战中国发生了哪些事件 催化式排气净化器是如何降低汽车尾气污染的 汽车尾气中含有CO,NO,一种新型催化剂能使二者反应,生成两种常见的无毒气体,反应的化学式为什么? 中国抗日战争和第二次世界大战全面爆发的标志分别是什么 坦克车为什么要装履带? 汽车尾气中含有Co、No,一种新型催化剂能使二者发生反应,生成两种常见的无毒气体,反应的化学方程式为? 中国在第二次世界大战中起到了怎样作用(一分题) 在坦克的轮子上安装履带,履带表面有凹凸不平的棱是为了 问:减小压强和增大压强分别有哪些方法? 用什么样型号的电磁阀控制或怎样联接,怎样才能把气缸在工作时能停止到上限与下限的中间位置呢? 请问怎么用220V接近开关控制油泵启动,接近开关电流很小,若用中间继电器串联控制,电流也是很大啊 北京在奥运时用的一种三效空气净化器可将汽车排出的一氧化碳一氧化氮转化成A二氧化碳 氮气 B二氧化碳 氧气 氮气 关于二战的故事 接近开关可以直接控制中间继电器吗?是哪种型号的接近开关呢 一个开关,一个气缸,怎么控制气缸上下动作首先,是不使用任何控制阀,只有一个开关;其次我这个是纯粹的气动装置,没有电控;最后这是一个机械往复动作,靠人去执行,按一下按钮气缸压下去 请问感应器感应工件后,电磁阀动作,气缸前进.气缸上的磁性开关和三者有什么关系,会不会给PLC信号?我现在又个感应器控制两个气缸,如果我想让动作正好相反的话,把感应器位置改变下,气管 汽车尾气中污染空气的主要物质是有CO、SO2、CO2、NO中的几种 关于气缸的行程控制问题我有一个气缸,我想在气缸上加两个磁性开关,我想通过磁性开关来控制气缸的行程我想气缸走到一半的时候,不知能否在这个时候让气缸停下来. 如何简单的方法及仪器测试饮用水水质 2个接近开关控制2个气缸(电磁阀控制)的动作.顶到其中一个接近开关,气缸中一个动作,顶到另一个动作相接近开关1、接近开关2,气缸A、B(用电磁阀控制)中间继电器两个,动作如下:当到 如何控制气缸伸缩我对这方面不懂,我需要气缸控制:行程50-100mm,推力1kg左右,按开关,前进至需要的位置后自动停止,再按开关,回原位.请问:1、需要连接些什么元件?2、各元件的参数? 什么是水质测试笔?怎么使用? 电磁阀与PLC控制汽缸保持问题现在有汽缸电磁阀控制汽缸顶出与复位运动,到达位置利用传感器检测到位信号,这个时候汽缸就不顶出了,电磁阀肯定要断电,那汽缸不就复位了吗,我要求让汽缸 气缸控制行程我需要气缸做定位运动,假如我选了个行程500MM的气缸,他推着我的工件到一个位置后,工件被传感器感应到,我就给电磁阀断电(因为工件大小不一,所以气缸推的位置也不一样), 想测一下家里的水质,怎么弄 接近开关,电磁阀,气缸电磁阀控制气缸,当电磁阀关闭时,气缸的进气管被堵,气缸的出气管也通向电磁阀.那气缸是怎么回复到没有顶出的状态的,是用弹簧拉?当气缸被顶出时,进气孔和出气孔是 汽车尾气中CO和氮氧化物哪个排的更多? 怎么检测水质的好坏?怎样的水才可以饮用?我家的水塘里丢了一些喂鱼的草,鱼没吃完,结果水就有了一种气味,不知道还能不能饮用. 在汽车排气管上安装尾气净化装置,可使尾气中的CO和NO在催化剂表面发生反应产生两种空气组成的气体,2NO + 2CO = N2 + 2CO2,条件是加催化剂.为甚麽会生成氮气,而不是二氧化氮. 用 催化转换器 处理后的汽车尾气,由于含有-易于空气中的水蒸气作用,形成酸雾.要解决这个问题,还需采取的 有什么办法可以净化自来水的水质么?家里的水太难喝了.要求:使用生活中常用的东西. 尾气中的NO.CO在“三元催化装置”中发生反应,两种生成物都是空气中的气体成分,请写出相应的化学方程式 为什么装有三元催化转换器必须使用无铅汽油? 在高速公路上,一辆长4米,速度为110千米/时的轿车准备超越一辆长12米,速度为100千米/时的卡车,则轿车从开始追尾到超越卡车,需要花费的时间大约是多少秒 在汽车排气管上安装尾气净化装置,可使尾气中的CO和NO的催化剂表面发生反应,产生两种空气组成的气体写化学方程式 第二次世界大战期间主要事件 普通农村用户可以用什么基本方法检测井水水质? 如何控制汽缸做自动往返运动?让汽缸隔五秒运动一次.也就是推出去停顿5秒缩回,缩回停顿5秒又推出去.这样一直往返工作,但是我需要10个汽缸同时做这样的运动.怎么设计?需要什么配件,最好 第二次世界大战所发生的故事 如何进行水质检测,居家水质测定的方法
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn