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

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

Nginx创始人Igor Sysoev解读Nginx的发展史 对女性友好的编程语言 ISC2013专家云集,畅谈全球网络安全 CTO俱乐部第109期下午茶:数据库之分久必合,合久必分 CloudConvert:支持移动应用的格式转化服务 Angular.js VS. Ember.js:谁将成为Web开发的新宠? 斯卡利沉寂多年后首谈乔布 他的离开错在董事会不在我 CTO如何避免决策失控(二):遭遇棘手问题的七种迹象 微软面向开发者提前发布Windows 8.1 安抚不满情绪 PostgreSQL 9.3发布,可靠性、可用性获得较大提升! Web设计的新宠儿:卡片式设计 LSI:从“计算”架构到“数据流”架构的变迁 [开源推荐]TurboGears:一站式的Python开发框架集合 腾讯云公测终究还是来了 BAT云大战将开启? iOS 7将从这三方面影响IT界 超越Google,他企图将整个互联网塞进1台电脑 2013互联网安全大会议题先睹为快之CSA中国理事赵粮 移动建站工具(二):分秒钟DIY一个移动网站 2013上半年中国移动互联网报告,在线完整版 iOS开发者必备:九大设计类工具 已到“迟暮之年”?微软投资者提议两“救世主”外部候选 【SDCC讲师专访】Joseph G. Brown:云带来的软件销售方式变革 用户界面设计攻略:设计师需注意的九大要点 Google Glass的竞争对手来了:看YC演示日的五款新孵化项目! GPU Saturday技术沙龙:OpenCL程序员眼中的下一代APU架构 黑帽大会演讲中国第一人:从攻到防,从白帽黑客到创业者 15个步骤创立技术公司,并收获千万用户(完结) CTO容易犯的三大错误 谷歌艺术计划:互联网能否取代真实的博物馆? Hadoop技术沙龙:Hortonworks技术研发总监展望Hadoop 2.0 Marissa Mayer:雅虎月活跃用户增长了20%达8亿 移动用户3.5亿 安装office2k的问题 一个update语句的问题。 jsp和mysql的问题小弟拜求再线等 请大家介绍几种检测内存溢出的软件,谢谢!(各种系统下的都行) 这是如何做的 我发的贴子没人来看呀,解决了,我把自己的分全给你!********** mysql远程连接的问题 为什么国内域名比国际的还贵呢? 是否继续当中型软件公司做程序员还是到小公司独当一面? vc7中的CDHtmlDialog值得用吗?请大家来讨论一下! 为什么国内域名比国际的还贵呢? 急急急,我又碰到大麻烦了!~? 在DOS环境下用什么命令来查看非文本文件内容,如在UNIX下的cat命令的功能,在线急等。。。 ★在软件中提供了自定义热键的功能,但是我如何判断该热键已被占用了呢??? 羽毛球爱好者,请进 入门:关于验证字已失效的问题 blob字段如何存取? 一个编程论坛 那位能给我一个qq号呀,我急用 liangdiantech@163.com 羽毛球爱好者,请进 请问哪里有Microsoft Application Center Test的相关资料?多谢 非常简单的问题!!! 轻松心态,远离非典! 在自己的机器上打不开联接 DataModule的问题(菜鸟级) 怎么把表中的列约束为唯一的? 一个编程论坛 从没见过的问题!!!晕了!! 安装问题,请指教! C++的应用是什么意思呢? 得到上传文件大小的问题,解决高分相送!! R6中的问题!高手请进!高分求救! 一个电子书籍下载和编程论坛 请问怎么在vb中调用纯c接口的api并实现多线程 如何在一个很大的文件中删除一段数据?不用拷贝的方法 the C++ programing language里的两个小问题!!! 找在没行带checkbutton的listbox控件类 我可怜的QQ被盗了~~有什么密码破译软件取回QQ的密码吗 VARIANT结构中,如何通过pvarVal指针来获得串口传来的二进制流?? 天啊,这就是《程序员》? 编译java程序需要哪些工具,菜鸟提问. how to use *.pak?? ★在数据窗口中如何同时实现多行操作,如update或delete多行。 请问oracle8i的下载问题! 请问MSDN.net 中文版光盘出了吗??????????????????????? 关于STRING的问题 在IE中程序运行有错误?请指点! JB8做个BMP,奇怪问题 有谁知道*.dns用什么软件打开吗,急!!! 大家给我推荐一个delphi源码网站 Oracle8.17的安装问题,请大家帮忙,急呀!谢谢! 中国国资改革进入关键期 “领队”角色快递员送货路上猝死 “过劳现象”蔓延联合国官员:目前还在讨论叙利亚化武销获俄罗斯一大型私营网站聘用 斯诺登开英国检方称《世界新闻报》曾窃听哈里王洛杉矶机场枪击案嫌犯身份确定 被指曾巴武装人员挖地道埋炸药炸伤以军 巴以纽约将购烟年龄限制上调至21岁 禁止美国:伊拉克“平衡木”不好走克里承认美国一些监听行为很过分联合国官员:目前还在讨论叙利亚化武销美国防部否认美日制定钓鱼岛防卫计划联合国官员:目前还在讨论叙利亚化武销洛杉矶机场枪击案嫌犯身份确定 被指曾水泥槽罐车侧翻压住红色宝马 永康一对非洲沙漠车抛锚90人干渴而亡画面曝光田径名将史冬鹏河北保定大婚 体育局领田径名将史冬鹏今日大婚 新娘是其师妹43名中国人涉非法采金被加纳抓扣 2PMI升至18月最高 中国经济第三季同济大学与联合国机构合推绿色经济教材“学雷锋标兵”幼子烫伤 各界“雷锋”昨日是学雷锋纪念日:贵阳涌现好多“活贵州全省“十二五”期间专利申请授权数一加手机植入《纸牌屋》:“美国总统”教师“心酸”辞职信走红 言辞直接犀利露肉的季节美过明星靠三招!能瘦还能有保修期管用吗?智能手机售后谁来管贵州省质监局发布产品质量报告:102蟊贼打飞的赴杭州盗窃 派女友送衣物被新时代的宠儿——新华铜中年妇女想不开跳湖 物管三小伙拎手拎自来水有怪味?供水公司:增加了消毒剂贵阳市中学生英语写作大赛落幕 优秀作母牛春暖花开干活时突然发狂 用尖角顶2015快递满意度排名:和你心中的排站务员捡到手提袋装着\"千余万\" 手机厂商跨界做耳机?除了支持我还想说谷歌回归中国的问题 工信部终于回应了三星S7/索尼Z5 市售高端拍照手机英足总高官:组建超级联赛是自杀范加尔:让马塔做队长因为他资历深
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘