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

使用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之前,以免引起冲突。

使用Redis之前5个必须了解的事情 妆媒体微信公众号背后的酸甜苦辣 TIOBE 2014年10月编程语言排行榜:Dart首次进入前20 Instagram工程师教你如何改善App的性能 利用Neo4j对电影评论进行深度学习情感分析 【简讯】SQLite 3.8.7来了 性能提升超50% 浏览器重定向性能分析经验谈 豆瓣工程副总裁段念:看板方法核心瞄准流程中的“流动性” 【图文实录】CTO俱乐部公开课:探讨如何成为技术团队管理者 资深产品交付咨询顾问何勉谈看板:“以价值拉动”解决敏捷困扰 开源HTML5游戏引擎Frozen背后的技术 MDCC 2014精彩日程、演讲嘉宾、参展开发团队全揭秘(图) Hi,约吗?2014华为开发者联盟沙龙(上海站)火热报名中! 找虐新方向!TinyScreen显示屏打造最小游戏机 精彩继续 MDCC2014首次推出技术训练营 复制器官哪家强?3D生物打印找PrintAlive 电信开放平台应用内计费SDK 助力App小额快捷支付 专心做设计!开源跨平台应用开发框架Appverse Mobile 无线盛宴尽在阿里百川开放大会 医学界的Instagram:加拿大重症监护医生开发照片分享应用 2014中国移动开发者大调查第二批获奖名单揭晓 基于OpenStack的私有云开发部署实践 亚马逊云平台的迁移过程 【干货】微信企业号开发资源集锦 CSS生日快乐:CSS之父Håkon Wium Lie访谈录 好友近2000万,绑定银行卡过千万,日会话近百万,招商服务号成功之道 一名程序员十年技术之路的思考与感悟 聚焦企业号、服务号典型案例 微信开发者大会深圳站正式开启 Objective-C之父Brad Cox访谈:我的编程之路 【先锋】完成B轮融资的TalkingData新商业模式:平台理念+跨界分析+技术开源 1/10计算资源,1/3耗时,Spark颠覆MapReduce保持的排序记录 和 Oracle 的连接问题(odac ) 帮忙看一下有什么问题!! 高分求救!!急!!关于无法找到动态连接库的问题。 指纹算法 Java Developer Interbase如何自动保存更新 请教数据库连接池的使用.... 不要以为你不骂人你的素质就比那些骂街的高了,如果你卖国那么你的素质比那些骂街的更低,因为你基本不具备一个人的素质了 哪位有有关Vtune的相关资料呀,提供链接也行,最好是指南一类的,3X。 编程几年了,没有希望,想改行,你们呢? 有谁做过“文物馆的文物或藏品综合管理系统”如能提供资料或动者!本人感谢! 入门时奇怪问题? 如何把*.IMG文件转换为JPG文件? 其实你不懂我的心 那里可以买到microchip的mcp2150 ,(要现货),比较紧急,请帮忙 关于对2进制文件的操作 将去做SAP ABAP4平台编程,用过的请进。up有分。 C的图形问题? 为什么我点进去看不到内容? 如何考中程 数据窗口控件为dw_6,其间的对象为D_PUR,我想使其中的图片框的VISIBLE属性变为FALSE总是有错误,请教:)在线等待 kylix2在RedHat7.2下的安装问题? 能告诉我吗????各位哥哥指点一二 数据库置疑问题,并不难?请进 关于串口通讯(向手机发送AT命令集) 高手请看:表格的终极问题 如何得到treeview中选中项的标签或内容? 在哪能下载到FOXPRO2。0(FOR DOS) 请教高手!我没多少分了,50分给你! 怎么办? 谁救救我啊,怎么办? 对已生成的窗体缩小和移位后,恢复原始状态遇到的问题 字段中如何存入一个回车和换行符? 一个MYSQL的问题? PFC编程的那几个PBL库 我这里怎么会没有 请教高手 求最佳算法,谢谢,考试题目,请各位大俠务必帮忙,跪谢! 神阿,救救我吧! 求教高手!关于installshield的问题!我就50分了,全给你! 我号帐号的Email是eColdBlood@csdn.net,好玩吧?! 在COM编程中,PROXY/STUB到底怎么解释为好?谁的COM厉害请解答! 兄弟们帮忙,一个MM让我猜谜语!! win98 序例号? 关于struts的问题 关于变量的问题 想开发路测系统,如何最简单实现 GIS,GPS 最简单功能。欢迎指导 美女求救,谁答的好就嫁给谁!! 用Delphi做类qq聊天软件! 用命令行使用Visio2000 随便写写 设置Form那个属性,能使程序运行后它的窗口是隐藏的? 有谁知道哪里有LINUX的安装程序下载,国内网站的 汽车行驶的话,动力是靠发动机的转动,带动车轴,使轮胎与地面产生磨擦力,从而运动的.那么进油的量一定的话,就是额定功率一定吧,汽车从静止开始运动,前进的力的大小是没有变的吧,就是加 已知:关于X的方程(1-2K)X^-2(根号下K+1)X=1有实数解.只求K的取值范围. 北方建设一亩大养鱼池需要多少钱 一个梯形的上底是12米下底是20米高是上低的10分之9求这个梯形的面积? 隐性基因如何变成显性基因 我有2亩鱼塘不知道养殖好?收益怎么样? 高效液相色谱法测定食品中山梨酸,苯甲酸为什么会出现倒峰 显性基因和隐性基因列举一些隐性基因和显性基因(例如双眼皮是显性基因,单眼皮是隐性基因).越多越好 浅谈如何改进高中英语语法教学 甲 乙两车共运一批煤,甲先运了百分之30,余下的按2比5分给甲乙,运完时乙运了30吨,这吨煤有多少 隐性基因变成显性基因概率 线粒体是有氧呼吸的主要场所.下列关于线粒体结构和功能的叙述,正确的是()A有氧呼吸酶主要分布在线粒体的外膜、内膜和基质中B线粒体可以再有氧条件下将葡萄糖氧化分解为CO2和水C线 甲,乙两车共运一批煤,甲车先运了30%,余下的按2:5分给甲乙两车运,完式时,乙车共运了30吨.这批煤原有我知道答案是60,过程是什么,还有原因 关于显性基因和隐性基因的如果父母双方都无A显性基因,爷爷有A显性基因,奶奶无,外婆外公都无,那孩子会不会有A基因? 线粒体是有氧呼吸的主要场所,下列关于线粒体结构和功能的叙述,正确的是A有氧呼吸酶主要分布在线粒体的外膜、内膜和基质中B线粒体可以再有氧条件下将葡萄糖氧化分解为CO2和水C线粒体 一块梯形布的面积是0.77平方米,上底1米,下底1.2米,这块梯形布的高是多少米?S梯=(a+b)h÷2回答者重重有赏 关于显性基因隐性基因已知有酒窝和无酒窝是一对相对性状,决定有酒窝的基因(D)是显性基因,决定无酒窝的基因(d)是隐性基因.一对无酒窝的夫妇能生育出有酒窝的子女吗? 用生活中的具体事例说明"人人为我,我为人人". 初三物理17(2)我画对了吗;19题的图该怎么画 怎么把秸秆分解成纤维素和半纤维素和木质素 线粒体是有氧呼吸的重要场所吗 高一物理题(快!)在光滑的水平面上放着物体A和小车B,如图所示,小车长L=2m,M=4kg……在光滑的水平面上放着物体A和小车B,如图所示,小车长L=2m,M=4kg,A的质量m=1kg,μAB=0.2,加在小车上的力(1)F=5N,(2)F 关于海豚的英文谚语 人人为我我为人人的具体事例 木质素纤维和木质纤维素是一种物质吗? 世界上有多少种海豚?谁也是喜欢海豚的? 基因是Dd还是D和d 木质纤维素与木质素纤维一样的吗? 太阳内部温度有多高? ,D表示显性基因 我想问能否用DD表示一个显性基因 就是DD 纯合子 可否写成DDDD 求大手 用电解法制取氢氧化亚铁,阳极为铁,阴极为石墨,电解质溶液可以是氯化钠溶液,氢氧化钠溶液,我想问用纯水可以吗 太阳的表面温度有多高? 基因组成是Dd的,d控制的性状是什么,但d还会____? 为什么不能用电解法制取铝以后的金属单质,如果用电解法产物是什么?比如电解Cu(OH)2,Cu(NO3)2产物是什么 为什么太阳外部温度比内部高? 生物书上表示基因一会用Dd,Bb,Aa一会又有用Rr,Hh,XaY烦的很!使用这些这字母表示基因有什么准则吗?每...生物书上表示基因一会用Dd,Bb,Aa一会又有用Rr,Hh,XaY烦的很!使用这些这字母表示基因有什么 苯甲酸和山梨酸哪个不能加聚 原来,德国的选举制度与英国、美国一样,分为两院制:联邦议院、联邦参议院.德国联邦议院议员由普选产生,德国联邦参议院议员则由各州政府官员作为代表组成 英国的“上院”和“下院”是怎么回事 夏天白天热,为什么晚上还是热,晚上又没有太阳呀? 下列各国议会,只起到 "修饰门面" 作用的是:() A 英国上议院 B 美国参议院 C法国众议院 D德国帝国议会 各位大侠问一问,英国的上院和下院的权力谁的权力大,为什么?还有不是内阁首相由议会多数党领袖担任吗?如果议会多数党一换是不是首相也就跟着换,最后一个问题是议会通过对政府的不信 冰岛夏季气温不高的原因 英国历史上有那些王朝?每一个王朝的起止年代和简要说明. 议会的上院,通俗易懂些 为什么电解氧化铝时 铝在阴极生成是不是有什么规律 左撇子基因在什么染色体上?是显性还是隐性?请有依据,如:出自什么书等. 麻辣烫底料配方\汤料配方? 生活中有哪些 人人为我,我为人人 一对同源染色体上有一对显性基因和一对隐性基因,对吗?http://zhidao.baidu.com/link?url=G0PpnX6-AC9-U6AEzGreloRjNgvCvO4h_fGgnreU5Xu1wr2yjXtfvW9exF8yQTsLkLAa_S09r4sX1Mu7ypCFfK这里采纳的回答是这么说的 英国议会的上院有什么职责?两党和元首都从下院产生,那上院呢? 氯化铝和氧化铝熔点咋比较 举例日常生活中人人为我,我为人人的事例 为什么说一对显性和隐性基因位于一条染色体是错的? 【物理】关于汽车行驶时F-t图像的问题某汽车在平直公路上以功率P、速度v0匀速行驶时,牵引力为F0,在t1时刻,司机减小油门,使汽车的功率减为P/2,此后保持该功率继续行驶,t2时刻,汽车又恢复到 囊萤夜读者中 读了这则短文后,你认为这个书生是个怎么样的人 请问 常染色体上、 X染色体上与Y染色体上的隐性与显性基因控制遗传病的各自特点是什么?谢谢 质量M的汽车在平直的路上以额定功率P从静止开始启动,经T秒到达最大速度V,求汽车做功多少?阻力做功多少?汽车行驶的距离多少?回答得都正确,但分只能给一个人~下面的不好意思哦~ 若方程x+y-根号下x+y+2k-1=0只表示一条直线,则实数k的范围是 如何有效地进行高中英语语法教学
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘