分享
 
 
 

用Delphi自制英语复读机

王朝delphi·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

英语已经逐渐成为一种世界性的语言,现代人学习英语的热情一浪高过一浪,所以,英语复读机十分的热销。但是,无论功能如何强大的复读机都有一个明显的缺陷——复读时间的固定的。如果复读时间太短,那么,当遇到长句子时就无能为力;如果复读的时间很长,使用时就免不了复读一些多余的部分,免不了进行快进(时下有些200秒的复读机具有快进功能),这与磁带的快进一样麻烦!所以,笔者想利用Delphi强大的媒体播放控件开发一个软件复读机。软件复读机最大的优点是,无论是句子的长短您都能自如地复读!绝对不需要倒带,也不需要快进。不仅如此,软件复读机还具有随机选读功能,这是一般复读机很不好实现的。

准备工作

Delphi的媒体播放控件可已播放各种声音文件。我们可以根据自己的喜好把学习资料录制到计算机中,存成合适的格式。一般可存成wave文件或mp3文件。

复读机的开发

开发软件复读机使用的主要是Delphi的媒体播放控件TMediaplayer。该控件在系统控制(system)页中。

首先创建一个应用程序。设定主窗体的BorderStyle为BsDialog,禁止窗体的放大与缩小。设定KeyPreview为True,让主窗体处理键盘事件。

在主窗体上放置控件:

其中:

媒体播放器是程序的关键控件,用来实现声音的播放。

TrackBar用来指示当前的播放进度。

左边的TlistBox(SectionList)用来存放将要播放的声音文件名(学习资料)。

右边的两个TlistBox(StartList、StopList)用于记录复读过的句子。

‘增加’与‘删除’按钮用于维护学习资料。

TrackBar1用于显示播放进程。

Timer1用于动态显示播放进度。

OpenDialog1用于选择播放文件。

复读功能的实现:

① 程序中设置两个整数(StartPos, SstopPos)用于记录播放的起止点,并在初始化时将StopPos赋值为-1。

② 每次播放时记录当时的起始值:StartPos := Mediaplayer1.Position;

③ 程序中用空格键控制复读,回车键继续放音。首先,设置主窗体的KeyPreview为True,使主窗体能够截获按键消息。然后,重载OnKeyDown方法。代码如下:

自由选读功能的实现:

由于在复读时记录了所有复读过的句子的起止点,所以可以进行任意一句的复读。当用户用鼠标双击‘往昔岁月’中某一行时,可直接切换到该句的播放。代码如下:

procedure TRepeaterForm.ListDblClick(Sender: TObject);

begin

SID := (Sender as TListBox).ItemIndex; //取得当前行的索引

SID StopList.ItemIndex := SID; //将终点列表设置为

SID StartList.ItemIndex := SID; //将起始列表设置为

SID StartPos := StrToInt(StartList.Items[SID]);//取得开始位置

StopPos := StrToInt(StopList.Items[SID]);//取得终止位置

Mediaplayer1.StoP; //停止当前的播放

Mediaplayer1.StartPos := StartPos; //设置新的播放范围

Mediaplayer1.EndPos := StopPos;

Mediaplayer1.Play; //播放指定范围的声音

end;

学习资料的添加:

单击增加按钮用于增加学习资料。需要注意的是在增加新的文件之前应检索原有的列表,以防止重复。代码如下:

procedure TRepeaterForm.AddBtnClick(Sender: TObject);

var fn: string;

begin

if OpenDialog1.Execute then

begin

fn := OpenDialog1.FileName;

if SectionList.Items.IndexOf(fn)<0 then //先检索该文件,如果不存在 SectionList.Items.Add(fn); //加入到列表中

end;

end;

学习资料的选择:

通过重载OnClick方法实现。先取得单击时的索引,然后通过Items[索引]取得文件名。将文件名赋值给Mediaplayer的Filename属性,然后调用Open方法即可。(代码略)

另外,在程序的初始化时要打开学习资料文件;程序退出时将学习资料存盘。这些功能都是通过TlistBox.Items.LoadFromFile和TlistBox.Items.SaveToFile实现的(代码略)。

该程序在中文Windows98+Delphi5.0环境下调试通过。全部源代码可Mail作者索取。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有