語言朗讀機程式如何寫? |
答題得分者是:領航天使
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 讀任何語言皆可。 只要以聲音檔案做重複播放或斷點設定播放方式。 站長:語音引擎方式,是不用的。 不知道是否能夠完成?! ============================= 謝謝 領航天使 指教!Q~~ =============================我以前有寫過電腦語音自動掛號系統(用Delphi), 是由使用者將所有國字的發音錄音存檔, 一個字約0.8秒, 錄好約1700多個不同發音的檔, 再建立一個對照表, 所有13000多個國字對映到這1700多個發音檔, 遇到國字就找出發音檔用TMediaPlayer撥放, 撥完再找下一個字.... 不過發音很像機器人說話! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~ |
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
軟體語音復讀機 隨著數字化的發展,英語學習者手中語音資料也開始由模擬轉向數字,Real文件(后綴為.ra、.rm、ram等)和Mp3文件由於壓縮效率比較高自然成為其中的主流。但是在實際學習中發現,播放這樣的文件有許多不方便的地方,能不能用電腦實現像語言復讀機的功能呢?答案是肯定的,下面我們就自己來做一個軟體語音復讀機。
我們知道Real Player軟體是支持 Real 文件和Mp3 文件的, Delphi 4是一個非常優秀的開發工具,它完全支持ActiveX,可以很方便地創建、注冊、安裝、發布和使用ActiveX控件。在Delphi中,控件是應用程序的主要構件,通過可視化部件所見即所得地建立應用程序是Delphi的優勢。 1.ActiveX控件的使用方法
導入Real Player 的ActiveX 控件,生成引用單元,封裝成易於訪問的VCL 控件。 ==>TrealAudio元件 2.視窗的屬性定義如下所示,注意RealAudio的ControlData屬性值和OnPositionChange事件
object EchoForm: TEchoForm
Left = 234
Top = 171
Width = 442
Height = 204
BorderIcons = [biSystemMenu, biMinimize]
Caption = '語音復讀機'
Color = clBtnFace
Font.Charset = GB2312_CHARSET
Font.Color = clWindowText
Font.Height = -16
Font.Name = 'System'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 16
object spbOpenFile: TSpeedButton
Left = 1
Top = 144
Width = 80
Height = 28
Caption = '選取文件'
Flat = True
OnClick = spbOpenFileClick
end
object spbPlay: TSpeedButton
Left = 89
Top = 144
Width = 80
Height = 28
Caption = '播放'
Enabled = False
Flat = True
OnClick = spbPlayClick
end
object spbPause: TSpeedButton
Left = 177
Top = 144
Width = 80
Height = 28
Caption = '暫停'
Enabled = False
Flat = True
OnClick = spbPauseClick
end
object spbClose: TSpeedButton
Left = 352
Top = 144
Width = 80
Height = 28
Caption = '退出'
Flat = True
OnClick = spbCloseClick
end
object spbEcho: TSpeedButton
Left = 264
Top = 144
Width = 80
Height = 28
Caption = '復讀'
Enabled = False
Flat = True
OnClick = spbEchoClick
end
object RealAudio: TRealAudio
Left = 0
Top = 0
Width = 434
Height = 97
Align = alTop
TabOrder = 0
OnPositionChange = RealAudioPositionChange // OnPositionChange事件句柄
ControlData = { //RealAudio的ControlData屬性值
2143341208000000DB2C0000060A00004F61BC00000000000100000031000000
0000000000000000000100000000000000000000000000000000000000000000
00000000000000000000000000000000000700000023303030303030}
end
object chkStart: TCheckBox
Left = 8
Top = 112
Width = 65
Height = 17
Caption = '開始點'
TabOrder = 1
OnClick = chkStartClick
end
object chkStop: TCheckBox
Left = 224
Top = 112
Width = 73
Height = 17
Caption = '結束點'
TabOrder = 2
OnClick = chkStartClick
end
object edtStart: TEdit
Left = 80
Top = 104
Width = 121
Height = 24
ReadOnly = True
TabOrder = 3
Text = '0'
end
object edtStop: TEdit
Left = 312
Top = 104
Width = 121
Height = 24
ReadOnly = True
TabOrder = 4
Text = '0'
end
object OpenDialog: TOpenDialog
Filter = 'Real 音頻文件|*.ra;*.rm|Mp3 音頻文件|*.mp3'
Left = 440
Top = 8
end
end
設置開始點“edtStart”和結束點“edtStop”的屬性為只讀,防止使用者自己輸入錯誤資料,關掉 【播放】、【暫停】、【復讀】三個按鈕,當選取文件成功后,再打開他們。
procedure TEchoForm.spbOpenFileClick(Sender: TObject);
begin
if OpenDialog.execute then
begin
//設置語音文件
RealAudio.SetSource(OpenDialog.filename);
//沒有在復讀
EchoNow:=false;
//語音文件設置成功,打開播放鍵
spbPlay.Enabled:=true;
//語音文件設置成功,打開暫停鍵
spbPause.Enabled:=true;
end;
end;
3.1選取語音文件的實現:
編輯按鈕【選取文件】的處理事件
procedure TEchoForm.spbOpenFileClick(Sender: TObject);
begin
if OpenDialog.execute then
begin
//設置語音文件
RealAudio.SetSource(OpenDialog.filename);
//沒有在復讀
EchoNow:=false;
//語音文件設置成功,打開播放鍵
spbPlay.Enabled:=true;
//語音文件設置成功,打開暫停鍵
spbPause.Enabled:=true;
end;
end; 3.2播放功能的實現:
播放功能的實現,編輯按鈕【播放】的處理事件,只要調用 “RealAudio”的“DoPlay”方法就可以了
procedure TEchoForm.spbPlayClick(Sender: TObject);
begin
RealAudio.DoPlay;
end;
3.3暫停功能的實現:
暫停功能的實現,編輯按鈕【暫停】的處理事件,只要調用 “RealAudio”的“DoPlayPause”方法就可以了
procedure TEchoForm.spbPauseClick(Sender: TObject);
begin
RealAudio.DoPlayPause;
end;
3.4復讀功能的實現
捕獲“RealAudio”的 “OnPositionChange”的事件,設定開始點和結束點的位置,如果正在復讀,則判斷是否到達結束點,如果到達則跳到開始點
procedure TEchoForm.RealAudioPositionChange(Sender: TObject; lPos, lLen: Integer);
begin
if not chkStart.checked then
edtStart.text:=inttostr(lPos);
if not chkStop.Checked then
edtStop.text:=inttostr(lPos);
if lPos>=strtoint(edtStop.text) then //超過了復讀結束點
begin
if echoNow then //允許復讀了
begin
spbEcho.click;
end;
end;
end;
使用者選擇復讀開始和結束時間時判斷,結束點要求大於開始點,當兩個點都設置成功后,打開可以復讀按鈕,等候使用者選擇復讀功能
procedure TEchoForm.chkStartClick(Sender: TObject);
begin
//如果結束點小於開始點,則退出
if strtoint(edtStop.text)<=strtoint(edtStart.text)
then
exit;
//如果開始點和結束點都有了,則允許復讀
if (chkStart.Checked and chkStop.Checked)
then
begin
spbEcho.enabled:=true;
//設置復讀標志
echoNow:=true;
end
else
begin
spbEcho.Enabled:=false;
//設置復讀標志
echoNow:=false;
end;
end;
在前邊條件都準備好了以后,編輯按鈕【復讀】的處理事件,實現復讀只需要三行命令就可以完成,首先必須要暫停,然后設置復讀位置后開始播放
procedure TEchoForm.spbEchoClick(Sender: TObject);
begin
//先暫停播放
RealAudio.DoPlayPause;
//設置播放位置
RealAudio.SetPosition(strtoint(edtStart.text));
//開始播放
RealAudio.DoPlay;
end; ----------------------------------------------------------------- 不知道有沒有,更好的寫法?
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |