編程實現英文文章語音輸出牛
引言
現在有些軟件尤其是翻譯類軟件多提供有語音輸出的功能,比較有名的有《金山詞霸2000》、《不知不覺背單詞》等,他們所提供的英文朗讀功能是通過直接使用了Microsoft的TTS(Text-to-Speech)全程化語音技術來實現的。我們也可以在自己的程序中通過對MS Speech API 的調用來增加語音輸出功能,尤其是對于翻譯類軟件,如果沒有語音功能可以說這個軟件是不完備的。
為實現TTS技術,一個必要的前提條件是系統中要有MS TTS引擎,可以通過查看Windows目錄下是否有speech的目錄來判斷是否安裝過該引擎。如果沒有,可以從《金山詞霸2000》光盤上的ciba子目錄下的e來安裝MS TTS引擎和spchapi(MS Speech API)或是直接從互連上下載:可以從下載語音接口程序e; 可以從下載男聲語音引擎程序e;可以從下載女聲語音引擎程序e。
在整個設計過程中,主要是圍繞著b這個類型庫展開的,由于在VC下實現類型庫比較煩瑣,我們選擇使用TLB類型庫比較方便的Delphi來同b進行交互,并將幾個主要的功能如“朗讀”、“暫停”、“恢復”、“停止”等用幾個相應的功能函數來實現,最終通過DLL(動態鏈接庫)將其封裝在內,對外則僅提供幾個簡單接口,可以很方便的為Delphi或其他語言調用。在此我們通過采用VC++6.0來調用這個由Delphi開發的擁有TTS技術的動態鏈接庫來實現英文文本的語音輸出。
Delphi動態鏈接庫的實現
首先用Delphi創建一動態連接庫工程:選擇“File”、“New…”,在“New Items”對話框中選擇“DLL”,新建一動態連接庫工程Project1。繼續選擇“File”、“New…”,在“New Items”中選擇“Unit”,新建一單元TTSDLL。接下來把類型庫添加到工程,選擇“Project”、“Import Type Library…”,點擊“Add”按鈕,選擇C:\\windows\\speech\\目錄下的b類型庫,便將其添加到工程中來了。最后,TTSDll單元如下:
unit TTSDLL;
interface
uses VtxtAuto_TLB;
procedure Create;export; {待導出的過程和函數}
procedure Read(text:PChar);export;
procedure Pause;export;
procedure Resume;export;
procedure Stop;export;
function IsSpeaking:Boolean;export;
procedure Destory;export;
var
TTS: IVTxtauto;
implementation
procedure Create;
begin
TTS:=eate; {創建對象}
gister(\'Project1\',\'Project1\'); {注冊 }
end;
procedure Read(text:PChar);
begin
eak(text,vtxtst_READING);
{朗讀函數。第一參數是待朗讀的文本。第二參數用于控制朗讀的語氣和優先級,主要有以下幾種,可以根據需要靈活選擇,如需多種選擇將其進行或運算即可:
vtxtst_STATEMENT = 1;平時說話時語氣,默認。
vtxtst_QUESTION = 2; 提問的語氣。
vtxtst_COMMAND = 4; 命令的語氣。
vtxtst_WARNING = 8; 警告的語氣。
vtxtst_READING = 16; 閱讀文檔時的語氣。
vtxtst_NUMBERS = 32; 閱讀數字時的語氣。
vtxtst_SPREADSHEET = 64; 閱讀電子表格中元素時的語氣。
vtxtsp_VERYHIGH = 128; 立即讀出,可以打斷當前正讀的內容。
vtxtsp_HIGH = 256; 盡快讀出,加入播放隊列開始。
vtxtsp_NORMAL = 512; 默認,加入播放隊列末尾。}
end;
procedure Pause;
begin
dioPause; {暫停朗讀}
end;
procedure Stop;
begin
opSpeaking;{終止朗讀}
end;
procedure Resume;
水谷豐 資料圖及川光博 資料圖 新浪娛樂訊 北京時間7月19日消息 begin
dioResume;{恢復朗讀}
end;
function IsSpeaking:Boolean;
var
Check:Boolean;
begin
if Speaking then {判斷當前狀態}
begin
Check:=TRUE;{當前正在朗讀}
end
else
begin
Check:=FALSE;{當前沒有朗讀}
end;
Result:=Check;{返回狀態值}
end;
procedure Destory;
begin
TTS:=nil;{釋放對象}
end;
end.
在r的begin前面添加如下待導出過程函數列表:
exports
Create index 1,
Read index 2,
Pause index 3,
Resume index 4,
Stop index 5,
IsSpeaking index 6,
Destory index 7;
編譯通過后即可得到封裝有TTS語音接口的動態鏈接庫: l。
唐山哪婦科醫院好輕度中暑了怎么辦
內江白癜風醫院哪家好