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

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

不要责怪开源技术 它是无辜的 短命:微软将于2014年停止对WP8系统支持 Native和Web过时了,企业级移动开发流行用Hybrid App 与EverNote竞争?谷歌Google Keep浮出水面 又一次跨越:著名3D游戏引擎Unity版本更新 Feedly团队:自研后端平台或将开源 StackMob的诱惑:16小时,山寨一款移动App “云”筹帷幄 开发者必知的5大SaaS在线服务工具 超350个政府项目托管在GitHub 政府开源会成主流? Kinect for Windows SDK 1.7正式发布,支持3D建模 SafeNet与风河系统联手推出VxWorks嵌入式系统软件货币化方案 Windows Server 2012中的动态负载均衡 Google等互联网公司将成为创新中心? 在Hadoop的战争中 MapR获新一轮3000万美元融资 初创公司DNNresearch:谷歌科技帝国的新“基石” 创业了,我们该如何起名? 乐视网联手富士康推新盒子C1S “0+290元”新浪微博发售 吸引开发者:只要开发新应用 微软便奖100美元 PaintCode - 将矢量图转化为Objective-C代码的开发神器 苹果发布iOS 6.1.3 封杀evasi0n越狱所用漏洞 [API快讯] Google开放实时协作API 58同城开源轻量级Java Web框架 Argo 初创公司AppNeta:4轮融资,4780万美元 MongoDB释放2.4版本:692更新及8大得意之作 十年6亿美元!Amazon云计算喜获CIA大单! 国人当自强:HTML5+联盟首次筹备会成功举行 开源框架TAAE发布 快速打造iOS音频应用 如何学会600多种编程语言 “第五届中国云计算大会”将于2013年6月5-7日在京召开 Ridiculous Fishing:游戏遭遇山寨如何一雪前耻 老游戏的今天:Doodle Jump每周进账2万美元 我做了一个可以脱离开发环境制作报表的程序,(不过用的还是Qreport组件)希望大家看看该程序有没有实用价值 我需要统计每一列的每一数据占总记录数的百分比,怎么办? PB 7.0 和msxml parser的问题(50分) 请教:中文显示问题? vs.net 在沈阳有好用的D版吗?我换了两次了,可还是不好用!! IBM TP600硬盘加密问题!!!在线等待 求教!!! 我爱吃 鲜美的西瓜、苹果等…… cell帮忙来看一下 关于事务处理的问题! pb中解析xml的问题? 使用DrawText在窗口上画出几行字(带DT_WORDBREAK风格),请问如何知道其中任一字符的坐标值 送分小问题:客户端与服务器 谁能给我几个经典一点的directx方面的2d游戏例子吗 我毕业设计要用java做一个软件,能够实现信息隐藏技术,谁有这方面的经验?谢谢。100分 无比痛苦的我~~~~!! CEdit & CRichEdit 怎么调用flash文件 【【【简单的问题,只是我不知道而已 也不知现在那个版本的VS。ENT中文正式版要好点??? 关于DCOM的应用系统分发的简单问题! IBM TP600硬盘加密问题!!!在线等待 关于Linux下配置邮件服务器 哪里有适合delphi6的控健(包括fastreport)可以下载? 设备无关位图的数据,为什么与显示在屏幕上的RGB不一样,高手不一定会! 什么防火墙比较好???? 能用到存储过程吗? 如何操作动态连接库! 征求兼职,简单的数据库项目,要求人在上海。 怪问题送分 第五把钥匙 两台属于不同域的都安装的活动目录的服务器,如何建立域间的信任关系 一个delphi combobox的问题! WebControl中包含的中文字显示不正常? 怎样读取注册表中的数据呢? 刚刚写好一个 NT/2000/XP 的 backdoor (反向连接,插入系统进程,通讯加密) 愚人节千万别上厕所(刚看到的,转) 散 分! 高手进行,绝对给分! 继续上一个问题提问,关于动态窗体 不能加载控件dbgrid32?????许可证末找到??? 美萍反黄专家技术大讨论! Linux与四系统并存启动 怎么追这个很正点的女孩啊。请教。。。 急啊,连接数据库(online 请教MPEG4编辑问题 我的操作系统是2000,请问如何调整虚拟内存的大小? 谢谢詹维,请进来 java汉字显示乱码问题?? 我想自己编写一个画线的函数,不用mfc中的,而且速度要比mfc快,所以我想直接操纵缓存,请问怎么做? SQL SERVER2000中数据转换问题? 把充满谁的啤酒瓶倒立在水中,然后抓住瓶底慢慢向上提,在瓶口离开睡眠之前,瓶内露出水面的部分将( )A、充满水B、有水,但不满C、酒瓶中无水D、瓶内外水中始终保持相平 求学霸解题!有过程好评 角a分别是 一 二 三 四象限的角 请问 1/2a分别是第几象限的角,并附上详细解析和关系式—————— 29.如图为一般的啤酒瓶,装满水后封住瓶口,不让水流出并倒立在容器内的水中后,打开瓶口,则 ( )A.瓶内的水会向外流出一部分,瓶内上部出 为什么向量与向量的积是常数,但是矢量与矢量相乘不是呢?不是说向量就是矢量,都是空间的线形元素吗? 已知A(1,2) B(m,6),若向量OA垂直向量AB,则实数m的值为?两个向量相乘=坐标相乘?不是向量a ×向量b=向量a的模×向量b的模×cos(夹角) 若cosθ>0,且sin2θ 向量矢量积和原向量的关系 已知A(1,2) B(m,6),若向量OA垂直向量AB,则实数m的值为? 若sin2α>0,且cosα<0,试确定α所在的角的象限? 关于向量(矢量)向量(矢量)的运算法则是什么?特别是乘法! 若a是第二象限角,则a/2是第几象限角? 若sin2α>0,且cosα 函数f(X)=根号下(x-a)(X大于等于a)的图像与其反函数的图像有公共点 求a的取值范围 fortran语言 DATA数组赋值问题 DIMENSION A(4,3) DATA A/3*-1.0,3*-2.0,3*-3.0,3*-4.0/请教A(1,1)A(1,2)A(1,3)这些数组的值赋给的是多少? cosθ>0 ,sin2θ 是C++程序 求a得值,程序如下 int a=0,m=3,n=10; a=(m++,m+n) 答案是14.不是逗号表达式最后的值应该是去最后一个的表达式的值吗,比如 ,,..则“表达式n”作为整个表达式的值.那么在这个程序里面不是 α为第四象限角,则2α在第几象限 重心,垂心,内心,外心,旁心是什么加图 8. ******执行下列程序段后,a的值是 . int a,b,c,m=10,n=9; a=(--m==n++)?--m:++n; A) 11 B) 10 C) 9 D)答案是D,不过我认为是C,为什么? 谁能把每句fortran语言都给我翻译一下integer row,i,j,k,nreal sreal,dimension(:,:),allocatable::a,l,ureal,dimension(:),allocatable::b,x,yread*,rowallocate(a(row,row))read*,((a(i,j),j=1,row),i=1,row)allocate(b(row))read*,(b(i),i=1,row)alloc 描写一个季节的雨要描写“一个季节”的雨,抓住它带给你的“一种感觉”复制粘贴没关系,重要的是要写出感觉来抓住特定事物的特征,写出真实而独特的体验看后补分 以下程序段执行后,m,n的值分别为( ). int m,n=4; m=n++; A)4,5 B)4,4 C)5,5 D)5,4以下程序段执行后,m,n的值分别为( ).  int m,n=4; m=n++;  A)4,5 B)4,4 C)5,5 D)5,4 a是第二象限角,a/3为第几象限角 用几句话描写你所见到的雨 设函数f(x)=2^(|x+1|-|x-1|),求使f(x)≥2根号2 的x的取值范围 关于fortran语言中if语句的简单问题DO I=1,LAIF(I-19) 1,1,21 FCOS = 90 - 5 * (I-1)GOTO 32 FCOS = 5 * (I-1) - 903 CONTINUEFCOS = .01745*FCOSACOS(I) = COS(FCOS)ACOS(I) = C*ACOS(I) * ACOS(I)END DO我想知道这个if语句是怎么执行的,那 设函数f(x)=2^|x+1|-|x-1|,求使f(x)大于等于2倍根号2的x取值范围 设函数f(x)=2^(|x+1|-|x-1|),求使f(x)>=2倍根号2x的取值范围 FORTRAN语言中两个嵌套的DO语句在同一行结束,变量是如何变化的?比如:DO 30 K=1,2 DO 30 J=1,2 (无关紧要的运算)30 CONTINUE是按照(K=1,J=1)(K=1,J=2)(K=2,J=1)(K=2,J=2)的顺序变化还是按照(K=1,J=1 f(s)=2^{(x+1的绝对值)+(x-1的绝对值)},求是f(x)大于等于二倍根号二的x的取值范围 关于一道C题目 (25)以下程序完全正确的是 A)int *p; scanf(“%d”,&p); B)int *p; scanf(“%d”,p); C) in #include < stdio.h > main() { int m,n; scanf("%d%d",&m,&n); while (m!=n) { while(m>n) m=m-n;while(m 已经定义int a;则执行表达式a=11,a+1,a++后a的值是?为什么? 描写雨的词语 C语言:关于有符号整型变量范围的问题为什么有符号整形变量的范围是-32768~32767 而不是-32767~32767呢?在TC系统下,一个有符号整型变量占两个字节,即有16个2进制位.除去第一位表示正负,剩下15 22 若a、b、c1、c2、x、y均是整型变量,以下正确的switch语句是_________.A."switch( a+b);{ case 1:y=a+b;break;case 0:y=a-b;break;}" B."switch( a*a+b*b){case 3:case 1:y=a+b;break;case 3:y=b-a;break;}" C."switch a{case c1:y=a-b;break;cas 已知向量a,b,且|a|=4,|b|=3,(2a-3b)×(2a+b)=61 (1)求a与b的夹角o (2)求|a+b|和|a-b| 若点B(a,a-3)在第二象限和第四象限的角平分线上,则a= 若a、 b、c1、c2、x、y、均是整型变量,选择正确的switch语句A、swich(a+b);{ case 1:y=a+b; break;case 0:y=a-b; break;}\x05B、switch(a*a+b*b){case 3:case 1:y=a+b;break;case 3:y=b-a,break;}C、switch a{case c1 :y=a-b; breakcase c2:x=a* main() { int r,m,n,t; scanf("%d%d",&m,&n); if(m 若α为第四象限角,则2α,α/3,α/2为第几象限角 若a,b,x,y均是整型变量,且a,b均已赋过值,则正确的switch语句是_________A:swich(a+b); { case 1:y=a+b; break; case 0:x=a-b; break; }B:switch(a*a+b*b) {case 3:case 1:y=a+b;break; case 3:y=b-a;break;}C:switch a { case 10 :y=a-b; break; ca 描写雨的词语有哪些 若a是第二象限角,则a/3所在象限是? 若以下选项中的变量a, b, y均已正确定义并赋值,则语法正确的switch语句是A) switch( a*a+b*b ) { default : break; case 3 : y=a+b; break; case 2 : y=a-b; break; }B) switch( a+b ) { case1 : case3 main () {int m,n; scanf ("%d%d",&m,&n); while (m!=n) { while(m>n) m-=n; while(n>m) m-=m; }printf("m=%d\n",m)}如果键盘上输入65 14 结果是? 瓶子里的气球把一只气球塞进瓶子,气球口拉出瓶口.如果你现在开始往瓶子里吹气,你认为你能把气球吹得充满整个瓶子的体积 空啤酒瓶装满水之后用右手打瓶口但瓶底烂?这么回事. 英语句子错误,语法不规范,求修改According to his father's will,a boy,only on the stipulation that in his minority he should never had stained his name with a public act of dishonor,meanness,cowardice,or wrong.译文:根据他父亲的 描写雨的词语有 若θ在第二象限,sin(cosθ)的符号是 这句话有语法的错误吗?1,He pratices running for an hour every morning.2,The doctor advice is that he (should) eat. 高一数学分别写出第一,二,三,四象限角的集合 速求数学中重心、内心、外心、垂心的概念?THANKS 怎么把ps做的标志在AI里做成矢量的? 已知a为第三象限的角a/2在第几象限他有俩个答案 重心垂心中心内心外心的定义分别是什么? 矢量积是什么向量里的~ 已知角α在第四象限,求角二分之α,三分之α,2α所在的象限
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘