用Delphi自製英語複讀機

來源:互聯網
上載者:User

  英語已經逐漸成為一種世界性的語言,現代人學習英語的熱情一浪高過一浪,所以,英語複讀機十分的熱銷。但是,無論功能如何強大的複讀機都有一個明顯的缺陷——複讀時間的固定的。如果複讀時間太短,那麼,當遇到長句子時就無能為力;如果複讀的時間很長,使用時就免不了複讀一些多餘的部分,免不了進行快進(時下有些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作者索取。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.