程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 在程序中加入英文朗讀功能

在程序中加入英文朗讀功能

編輯:Delphi
金山詞霸2000的奂文全文朗讀功能相信一定給嘗試過的用戶留下了很深刻的印象,而作為一個程序設計者,你一定也想在自己的程序中加入類似的功能吧,因為那將讓自己的程序增色不少。

其實這並不是一件困難的事,因為金山詞霸實際上也只是直接使用了MS的TTS(Text-to-Speech)技術而已,通過對MS Speech API 的編程,我們完全可以實現比其更強大的功能。下面,讓我們在Delphi環境下實際嘗試一下。

首先從金山詞霸的光盤上 ciba目錄下運行並安裝mstts. Exe(MS TTs engine)和spchapi. Exe (MS Speech API).

再在Delphi 裡新建一個application。

然後從Delphi的菜單Project/Import Type Library. . .中選擊Add. . .,浏覽到Windows目錄下的Speech子目錄裡,打開vtxtauto. Tlb,可以看到下面Class names中會出現我們需要的接口的包裝類的名字TVTxtAuto,注意對話框底部的Generate Component Wrapper需要被選中,點擊Create Unit 就可以打開一個名為VtxtAuTo_TLB的Unit。

至此,我們就可以開始實際編程了。

首先在Form的OnCreate中對需要使用接口初始化並進行注冊:

...

Procedure TfrmMain. FormCreate (Sender. Tobject); begin

FISpeech: = CoVTxtAuto_Create;

FISpeech. Register (“Demo Site’, ‘Demo App’); end;

...

由於Delphi對接口進行了良好的包裝,因此,只需直接建立包裝類,其他後台的操作如接口的查詢、釋放等交給Delphi在後台自動完成。

注意這裡的Register操作是必不可少的,因為可能有多個程序不同設置使用TIS引擎。

然後在MainForm上放一個Tmemo和若干個Tbutton,並在其OnClick中加入對應的代碼。

Form定義如下:

Object frmMain: TfrmMain

Left = 296

Top = 187

BorderStyle = bsDialog

Caption = ‘英文全文朗讀演示’

ClIEntHeight = 185

ClIEntWidth = 456

Color = clBtnFace

Font. Charset = GB2312_CHARSET

Font. Color = clWindowText

Font. Height = -12

Font. Name = ‘宋體’

Font. Style = [ ]

OldCreateOrder = False

Position = poDesktopCenter

OnCreate = FormCreate

PixelsPerInch = 96

TexHeight = 12

Object memText: Tmemo

Left =8

Top = 8

Width = 361

Height = 169

ScrollBars = ssVertical

TabOrder = 0

End

Object btnRead: Tbutton

Left = 376

Top = 8

Width = 75

Height = 25

Caption = ‘朗讀(&R)’

TabOrder = 1

OnClick = btnReadClick

End

Object btnPause: Tbutton

Left = 376

Top = 40

Width = 75

Height = 25

Caption = ‘暫停(&P)’

Enabled = False

TabOrder = 2

OnClick = btnPauseClick

End

Object btnStop: Tbutton

Left = 376

Top = 72

Width = 75

Height = 25

Caption = ‘停止(&S)’

Enabled = False

TabOrder = 3

OnClick = btnStopClick

End

Object btnForward: Tbrtton

Left = 376

Top = 120

Width = 75

Height = 25

Caption = ‘下一句(&N)’

Enabled = False

TabOrder =4

OnClick = btnForwardClick

End

Object btnRewind: Tbutton

Left = 376

Top = 152

Width = 75

Height = 25

Caption = ‘上一句(&W)’

Enabled = false

TabOrder = 5

OnClick = btnRewindClick

End

End

關鍵代碼段如下:

1.朗讀與停止

...

procedure TfrmMain. BtnReadClick (Sender: Tobject); begin

FISpeech. Speak (memText. Lines. Text, vtxtst_READING0;

BtnPause. Enabled : = True;

BtuStop. Enabled : = True;

End;

Procedure TfrmMain. BtnStopClicl (Sender: Tobject); begin

FISpeech. StopSpeaking;

BtnPause. Enabled : = False;

BtnStop. Enabled : = False;

BtnPause. Caption : = ‘暫停(&P)’;end;

...

speak成員函數的第一個參數向TTS引擎傳遞需要朗讀的文字,第二個參數由指定朗讀時使用的語氣和優先級的兩個符號合並而成。

 

符號

意義

語氣

   

vtxtst_STATEMENT

$00000001

平常說話的語氣(缺省)

vtxtst_QUESTION

$00000002

提問的語氣

vtxtst_COMMAND

$00000004

命令的語氣

vtxtst_WARNING

$00000008

警告的語氣

vtxtst_READING

$00000010

閱讀文檔時的語氣

vtxtst_NUMBERS

$00000020

適合閱讀數字的語氣

vtxtst_SPREADSHEET

$00000040

適合閱讀電子表格中元素的語氣

優先級

vtxtsp_VERYHING

$00000080

立即讀出,可打斷正在讀的內容

vtxtsp_HIGH

$00000100

盡快讀出,加入播放隊列開始

vtxtsp_NORMAL

$00000200

僅僅加入播放隊列末尾(缺省)

 

2.暫停為與恢復

...

procedure TfrmMain. BtnPauseClick (Sender: Tobject);

begin

with FISpeech do

if IsSpeaking then

begin

AudioPause;

BtnPause. Caption : = ‘恢復(&R)’;

End

Else

Begin

AudioResume;

BtnPause. Caption : = ‘暫停(&R)’;

End;

End;

...

這裡通過IsSpeaking屬性可以取得當前狀態,然後通過audioPause和AudioResume暫停和恢復朗讀。

另外用成員函數AudioFastForward和AudioRewind可以向前和後跳過一句朗讀,通過讀寫speed屬性還可以取得或調協朗讀的語速,單位是字/分,缺省值為170。

注意speed和Enabled屬性缺省設置是只寫的,但實際上IVTxtAuto提供了Get_Speed和Get_Enabled函數,所以我們只要把VtxtAuto_TLB單元中的聲明修改一下,如:

...

IVTxtAuto = interface (Idispatch)

...

property Speed: Integer read Get_Speed write Set_Speed;

propert Enabled: Integer read Get_Speed write Set_Speed;

...

end;

...

即可正常使用Speed和enabled屬性了。

至此,一個簡單的英文全文朗讀器就完成了,有興趣的朋友可以為其加入監視剪貼板,熱鍵激活等功能。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved