flyup
資深會員
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](http://family.idot.com.tw/bbs3000images/img/flyup.jpg) 發表:280 回覆:508 積分:385 註冊:2002-04-15
發送簡訊給我
|
語言朗讀機程式如何寫?不知道是否有完整範例。 1.Windows Media Player
2.RealPlay 哪一種寫語言朗讀機最佳呢?
|
領航天使
站長
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](http://delphi.ktop.com.tw/images/baby15-2.jpg) 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25
發送簡訊給我
|
引言:
語言朗讀機程式如何寫?不知道是否有完整範例。 1.Windows Media Player
2.RealPlay 哪一種寫語言朗讀機最佳呢?
要讀 中文 或 讀英文? ~~~Delphi K.Top討論區站長~~~
------ ~~~Delphi K.Top討論區站長~~~
|
flyup
資深會員
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](http://family.idot.com.tw/bbs3000images/img/flyup.jpg) 發表:280 回覆:508 積分:385 註冊:2002-04-15
發送簡訊給我
|
讀任何語言皆可。 只要以聲音檔案做重複播放或斷點設定播放方式。 站長:語音引擎方式,是不用的。 不知道是否能夠完成?! =============================
謝謝 領航天使 指教!Q~~
=============================
|
領航天使
站長
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](http://delphi.ktop.com.tw/images/baby15-2.jpg) 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25
發送簡訊給我
|
引言:
讀任何語言皆可。 只要以聲音檔案做重複播放或斷點設定播放方式。 站長:語音引擎方式,是不用的。 不知道是否能夠完成?! =============================
謝謝 領航天使 指教!Q~~
=============================
我以前有寫過電腦語音自動掛號系統(用Delphi),
是由使用者將所有國字的發音錄音存檔,
一個字約0.8秒,
錄好約1700多個不同發音的檔,
再建立一個對照表,
所有13000多個國字對映到這1700多個發音檔,
遇到國字就找出發音檔用TMediaPlayer撥放,
撥完再找下一個字....
不過發音很像機器人說話! ~~~Delphi K.Top討論區站長~~~
------ ~~~Delphi K.Top討論區站長~~~
|
flyup
資深會員
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](http://family.idot.com.tw/bbs3000images/img/flyup.jpg) 發表:280 回覆:508 積分:385 註冊:2002-04-15
發送簡訊給我
|
軟體語音復讀機 隨著數字化的發展,英語學習者手中語音資料也開始由模擬轉向數字,Real文件(后綴為.ra、.rm、ram等)和Mp3文件由於壓縮效率比較高自然成為其中的主流。但是在實際學習中發現,播放這樣的文件有許多不方便的地方,能不能用電腦實現像語言復讀機的功能呢?答案是肯定的,下面我們就自己來做一個軟體語音復讀機。
我們知道Real Player軟體是支持 Real 文件和Mp3 文件的, Delphi 4是一個非常優秀的開發工具,它完全支持ActiveX,可以很方便地創建、注冊、安裝、發布和使用ActiveX控件。在Delphi中,控件是應用程序的主要構件,通過可視化部件所見即所得地建立應用程序是Delphi的優勢。 ![](http://www.ccw.com.cn/htm/produ/psoft/01_9_20_5a.jpg) 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
資深會員
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](http://family.idot.com.tw/bbs3000images/img/flyup.jpg) 發表:280 回覆:508 積分:385 註冊:2002-04-15
發送簡訊給我
|
補充說明: 上面例子,都要以ActiveX 元件方式,並不實用。
使用時,常要先安裝相關軟體才能夠使用所設計好的軟體。
|
領航天使
站長
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](http://delphi.ktop.com.tw/images/baby15-2.jpg) 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25
發送簡訊給我
|
引言:
補充說明: 上面例子,都要以ActiveX 元件方式,並不實用。
使用時,常要先安裝相關軟體才能夠使用所設計好的軟體。
如果單純使用TMediaPlayer元件是否也需裝其它軟體?
(好像是不用吧?) ~~~Delphi K.Top討論區站長~~~
------ ~~~Delphi K.Top討論區站長~~~
|
flyup
資深會員
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](http://family.idot.com.tw/bbs3000images/img/flyup.jpg) 發表:280 回覆:508 積分:385 註冊:2002-04-15
發送簡訊給我
|
32 Bit Delphi 深度歷險
MPEGPlay library (mpegdll.dll) 不知道這個元件可不可以實現??
|