摘要:該文介紹了SAPI SDK語音開發包的用途和使用方法,結合作者的實際工作,梳理了語音開發平臺的概念及應用技巧,實現了基于.NET平臺的語音應用程序開發,并將這一技術應用于開放實驗室管理。
關鍵詞:SAPI SDK;中文語音合成;.NET平臺;應用開發
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2010)02-337-02
The Study and Practice of Chinese TTS Technology in .NET
QIAO Liang1, CHEN Xin2, SONG Wen-qiang1
(1.Department of Computer Science Third Military Medical University, Chongqing 400038, China; 2.Chongqing Zhengda Software Polytechnic College, Chongqing 400038, China)
Abstract: This paper describes the uses of the SAPI SDK development kit. Combined with the author's actual work, combed the concept and application skills of voice development platform, realized voice application development for .NET-based platform. In the end, built an open laboratory management system with this technology.
Key words: SAPI SDK; Chinese speech synthesis; .NET platform; application development
“未來的十年是語音技術的時代”,語音技術分為語音合成技術和語音識別技術。作為智能計算機研究的主導方向和人機智能交互的關鍵技術——“語音合成技術”更為實用。[1] 實現計算機文本語音合成,就是讓計算機開口說話,這也是人工智能的一個重要研究方向。隨著.NET技術深入人心,越來越多的程序員開始轉到.net平臺上進行開發。那么.NET平臺下是否擁有一種技術方案能夠快速的實現語音合成功能是我們要思考的問題。
1 SAPI SDK語音開發包簡介
語音開發平臺Speech SDK即是幫助開發人員實現語音應用的重要工具。然而,歷史的Speech SDK里面并沒有對中文語音進行支持,目前支持中文的Speech SDK最高版本為Windows平臺下的SAPI 5.1,該版本一共可以支持3種語言的識別(英語,漢語和日語)以及2種語言的合成(英語和漢語)。也就是說,在部分系統平臺上并未集成中文語音環境。如果需要,可以到http://www.microsoft.com/speech/download/sdk51下載。
SAPI SDK包含了語音應用設計接口(SAPI)、連續語音識別引擎(MCSR)以及語音合成(TTS)引擎等。其結構如圖1。
語音引擎則通過DDI層(設備驅動接口)和SAPI(SpeechAPI)進行交互,應用程序通過API層和SAPI通信。通過使用這些API,用戶可以快速開發在語音識別或語音合成方面的應用程序[2]。
2 語音合成(TTS)引擎開發環境的搭建
在安裝了SAPI SDK語音開發包后,先在C:\\Program Files\\Common Files\\Microsoft Shared\\Speech\\目錄下面找到SAPI.dll,這里面定義了SAPI的COM對象。將SAPI.dll中的SAPI運行庫轉換成.NET平臺下的Assembly---DotNetSpeech.dll,這樣原本抽象的API函數就可以變成.NET類庫中的一部分。我們可以利用.Net Framework自帶的工具TlbImp.exe來把SAPI SDK的COM對象導入到.Net中。
DOS狀態下執行以下命令導入SAPI的COM對象:
C:\\Program Files\\Common Files\\Microsoft Shared\\Speech>Tlbimp sapi.dll /out: DotNetSpeech.dll
然后,在.NET開發環境下,通過添加引用的方法將DotNetSpeech.dll引用即可。
3 從文本到語音轉換的實現
在完成了前述開發環境的搭建工作以后,打開Form1.cs代碼文件,在代碼開頭添加名字空間(注意大小寫)。
using DotNetSpeech;
這樣就實現了SAPI SDK的導入,下面我們就可以開始編寫應用代碼了。首先實現將一段字符串文本用喇叭讀出來。編寫成一個方法:
//朗讀文字 string txt 為要閱讀的文本
private void ReadTxt(string txt)
{SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
SpVoice Voice = new SpVoice();
Voice.Speak(txt, SpFlags);}
更進一步,將文本轉換成音頻文件,編寫成一個方法:
//生成聲音文件(Wav)
private void toWave(string txt)
{SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
SpVoice Voice = new SpVoice();
string wavepath = \"D:/聲音文件.wav\";
SpeechStreamFileMode SpFileMode = SpeechStreamFileMode.SSFMCreateForWrite;
SpFileStream SpFileStream = new SpFileStream();
SpFileStream.Open(wavepath, SpFileMode, 1);
Voice.AudioOutputStream = SpFileStream;
Voice.WaitUntilDone(Timeout.Infinite);
SpFileStream.Close();}
實際上,在文本的語音合成中,還存在著詞組搭配、多音字選擇的問題,可以采用自建詞組庫的方式進行解決,該文限于篇幅不再壘述。[3]
4 應用開發實例
“指紋識別開放實驗室出入登記系統”主要應用于院校實驗室學生自由出入時指紋登記。區別于以往的刷卡、筆錄等形式,此系統擁有無人專門值守、無需攜帶額外介質、不考慮卡片損壞遺失以及無需特別整理登記數據的優點。而要使用好指紋管理,語音提示尤為重要。如圖2。
圖2 指紋出入登記界面
若上機,指紋識別成功,即發音“歡迎xx上機”,離開時按指紋則發音“xx歡迎再來”。
指紋管理一個非常重要的問題就是指紋數據庫的建立。為此,利用SAPI專門設計了指紋叫號軟件,選擇一個學生集中自習的時間,依據學號順序,系統依次采用語音合成的方式叫相應姓名的同學上來錄指紋。實踐證明,這一做法極大減輕了管理員的工作量,一名管理員即可在半小時的時間對150名左右的學生進行有條不紊的指紋采集工作。學生對語音叫號也非常感興趣,很好得配合了這一工作的進行。
5 結束語
SAPI5.1 SDK為語音人機界面提供了強大的平臺,合理的應用語音平臺既可以大幅提高工作效率,也能在工作中體會樂趣、減少客戶之間的枯燥交流。該文詳細介紹了TTS的實現方法及個人工作總結,下一步,應該跟深入的探討MCSR的應用、TTS詞組拆分問題,實現深入的人機對話。更重要的,通過TTS的應用,通過該文,希望一起思考對以往程序設計中融入語音系統的意義。
參考文獻:
[1] 姚涵珍.TTS中文語音合成技術的研究與實踐[J].天津科技大學學報,2004,19(1):65-67.
[2] 陳本峰..Net平臺下開發中文語音應用程序[EB/OL].微軟中國社區.http://www.microsoft.com/china/community/program/originalarticles/TechDoc/Cnspeech.mspx.
[3] 張力.中文TTS系統中多音字的一種解決方案[J].計算機應用與軟件,2008,25(2):143-145.