用TTS技術開發具有文本朗讀功能的應用程式
摘 要:TTS技術已經越來越廣泛地應用到現代計算機的各個領域,本文介紹了利用微軟的Microsoft Speech SDK 5.1提供的TTS(text-to-speech)技術開發具有語音朗讀功能的應用程式。
關鍵字:語音合成;TTS;發聲引擎
中圖分類号:TN912.33;TP311.52 文獻辨別碼:A
Create speech-enableed Apllications with TTS Technology
Abstract: The TTS technology is more and more popular in modern computer, this article introduces How to Create speech-enableed Apllications use the Microsoft Speech SDK 5.1
Key word: Speech Synthesis;TTS;speech Engine
1.TTS技術概述
上世紀90年代中期以來,随着個人計算機的硬體和軟體功能越來越強,和現代語音技術的發展,以前在科幻電影中才能看到的會說話的電腦已經成為現實。而TTS技術正是電腦能夠說話的關鍵技術之一。
TTS是text-to-speech的縮寫,英文也稱Speech Synthesis即語音合成。語音合成就是一個将文本轉化為語音輸出的過程,這個過程的工作主要是将輸入的文本按字或詞分解為音素,并且對文本中的數字、貨币機關、單詞變形以及标點等要特殊處理的符号進行分析,以及将音素生成數字音頻然後用揚聲器播放出來或者存為聲音檔案以後用多媒體軟體播放。圖1形象地描述了這個過程。
圖1. text-to-speech實作過程
當應用程式需要發聲的時候就調用語音合成引擎(SPEECH SYNTHESIS ENGINE)進行語言合成,将文本處理後通過揚聲器用近似于人的聲音“讀”出來,通常還可以通過改變對語音引擎的設定改變“說話” 的速度,聲音頻率(低沉或者尖銳),聲音大小,還能模拟口形、唇形和舌位的變化對聲音的影響。面前計算機通過語音合成發出的聲音效果聽起來就象是錄音錄音帶發出的聲音。
與一些用預先錄制的聲音檔案實作發聲的應用程式相比,TTS的發聲引擎隻有幾兆大小,不需要大量的聲音檔案支援,是以可以節省很大的儲存空間,并且可以朗讀預先未知的任何語句。現在已經有許多應用軟體應用TTS技術實作語音功能,例如一些播音軟體可以用來讀小說或作校對工作,還可以朗讀電子郵件,一些電子詞典可以讀出單詞,還可以用于查詢中心自動播放服務資訊等。
2.關于Microsoft Speech SDK
實作TTS的核心技術本身是非常複雜的,不是一般開發人員所能完成的,但是有了
Microsoft Speech SDK這樣的工具的幫助,隻需要在應用程式中加入一些不太複雜的指令和操作,我們就可以建立具有TTS功能的應用程式了。
國内外有許多高科技公司和科研機構緻力于TTS技術的開發和研究,如微軟公司、IBM公司以及國内的科大迅飛公司都有較成熟的語音産品,并且任何人都可以獲得微軟公司免費提供的語音軟體開發工具:Microsoft Speech SDK。
目前的Microsoft Speech SDK已經有4.0,5.1等幾個版本,最近還推出了适合網絡語音程式開發的The Microsoft Speech Application SDK的測試版,這些SDK主要包括語音應用程式程式設計接口SAPI(SAPI使我們象使用windows API一樣友善地在程式中使用語音功能)和微軟語音識别引擎和微軟語音合成引擎,還提供了進行應用設計的例子。Microsoft Speech SDK 5.1 提供了英文和中文兩種TTS引擎,即可以用它開發朗讀中文和英文的應用程式,非常适合中國的開發者使用。
利用這些SDK,開發人員可以很容易地把TTS技術內建到應用軟體中,并可以自由釋出。另外Microsoft Speech SDK還提供了詳細的文檔幫助開發者進行程式開發。
3.實作TTS的條件準備
利用Microsoft Speech SDK進行TTS語音應用程式開發前要作一些軟體和硬體的準備:
1) 去http://www.microsoft.com/speech/下載下傳Microsoft Speech SDK 5.1或其它版本SDK,并且安裝到自己的機器上。
2) Microsoft VC++ 6.0 ,service pack 3 或更新的版本。
3) 聲霸卡和喇叭
4) 要實作該SDK的全部功能,則去http://www.microsoft.com/msdownload/platformsdk下載下傳新的Platform SDK。
另外要注意的是SAPI 5.1不支援windows 95。
4.在應用程式中實作TTS功能
微軟SAPI 5.1實作text-to-speech的核心是對COM接口IspVoice的應用,是以應用TTS技術最好要了解一下COM程式設計技術,但是即使從來沒有用過COM程式設計,隻要按照SDK的示例,也可以順利的實作TTS的功能。
SAPI 的API接口封裝得很好,我們不需要了解任何發聲引擎底層的工作細節。例如一旦在程式中建立了一個IspVoice對象,就可以通過調用
ISpVoice::Speak實作文本朗讀,通過調用ISpVoice::SetRate實作對朗讀速度的控制,以及通過調用ISpVoice::SetVoice實作對朗讀聲音的不同人物或語言控制(男聲/女生,中文/英文)等。事實上掌握對這個接口的應用就可以實作大多數TTS的應用。
在下面介紹的程式中,用VC++6.0實作了Text-to-Speech的應用。
(1)建立一個工程
建立一個工程,Projects頁籤中選擇MFC AppWizard (exe);下一步中選擇Dialog based類型。
(2) 設定SAPI路徑
應用TTS必須用到頭檔案sapi.h和sapi.lib,為了能編譯通過必須設定SAPI路徑:
a. 在選中tools菜單中的option子項。
b. 選中Directories頁籤。
c. 選中Show directries for清單框中選中include files項,并在Directories中添加sapi頭檔案路徑:例如:"C:/Program Files/Microsoft Speech SDK 5.1/Include".
d. 選中Show directries for清單框中選中Library files項,并在Directories中添加sapi LIB檔案路徑:例如:"C:/Program Files/Microsoft Speech SDK 5.1/Lib/i386".
(3) 設計程式界面
添加如圖所示的編輯框和指令按鈕。
圖2 程式界面
(4) 添加代碼
輕按兩下speak按鈕,添加朗讀代碼:
void CExe1Dlg::Onspeak()
{
UpdateData();
// 2) SAPI voice
ISpVoice * pVoice = NULL;
// 1)初始化COM
if (FAILED(CoInitialize(NULL)))
{
AfxMessageBox("Error to intiliaze COM");
return;
}
// 2)初始化SAPI
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL,
CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
if( SUCCEEDED( hr ) )
{
// 3)朗讀編輯框中的文字
hr = pVoice->Speak(m_mytext.AllocSysString(), 0, NULL);
//完成發聲後可以将聲音對象釋放
pVoice->Release();
pVoice = NULL;
}
// 1)與CoInitialize(NULL)成對使用,釋放COM
CoUninitialize();
}
注:m_mytext是編輯框的變量名。
以上的代碼中主要做了幾件TTS最基本的事情:
1) 初始化COM ,因為SAPI是基于COM的應用,使用之前必須首先初始化COM。
2) 建立voice對象,即一個COM對象。
3) 實作朗讀,即調用speak方法。
另外必須把頭檔案sapi.h加到前面:
#include <sapi.h>
編譯通過後就可以運作程式了,在編輯框中輸入一段文字,按speak按鈕,我們就能聽到電腦讀出的令人興奮的聲音了。
Microsoft的TTS引擎提供了4種朗讀文字的聲音,其中三種英文聲音:Mary(女),mike和sam(男)一種中文聲音:simplyfied Chinese。因為預設的TTS引擎是英文發聲,如果要想朗讀中文或選擇不同的人進行朗讀,可以在朗讀前調用
ISpVoice::SetVoice方法進行聲音的設定,或者在朗讀前輕按兩下用控制台中的語音圖示(安裝
Microsoft Speech SDK後自動添加的
),選擇文字-語音轉換頁籤進行預設聲音的設定。
5.結束語
SPAI 5.1不僅适合用VC++進行開發,還可以用VB、c#等進行開發,具體方法可以參考SDK幫助文檔。結合windows程式設計的其它技術,隻要取得文本的内容,就可以實作對對word、IE、電子郵件等各種文字的朗讀。
本人利用windows API剪貼闆操作函數和模拟鍵盤的方法在朗讀程式中實作了對任意文本内容的擷取,包括IE、WORD、PDF等所有可以被滑鼠選中的文本。另還外利用中英文内碼的不同對所取得的文本進行中英文分析并按不同的語言分段,在朗讀前利用ISpVoice::SetVoice方法進行中文或英文聲音的設定,進而實作了中英文混合文本的朗讀。合成這些方法和技術實作了一個電腦播音軟體。
此外Microsoft Speech SDK 5.1的語音識别技術和語音識别引擎功能也很強大,可以用它開發具有語音識别功能的程式。
參考文獻:
[1] Microsoft Corporation. MSDN Library Microsoft Corporation,2001-10
[2] Microsoft Corporation. Microsoft Speech SDK SAPI 5.1 Microsoft Corporation,2001
[3]Jagadish.G . Using Text to Voice Interfaces [EB/OL]. http://www.codeproject.com/audio/SpeakText.asp, 2002-09
[4]Agus Kurniawan. Simple Program for Text to Speech Using SAPI [EB/OL]. http://www.codeproject.com/audio/speech.asp ,2001-11