你可能已經注意到如今語音合成越來越普遍成百上午的電動玩具和小器具都能夠以機器的聲音向它們的主人講話不管它是一個講話的嬰兒玩偶一個會談話的計步器或是一新的自動電話系統現在幾乎每天都會有一種使用文本來發音的產品發行
文本到語音(TTS)技術也稱為語音合成是把輸入的文本轉換成音頻語音的過程這種方式會優於預先錄制好的文本它必須對要說的內容提前了解而使用TTS卻有可能加入動態的信息該動態的信息可以來自於一個數據庫或是用戶不斷重復的話
一 TTS試驗
如果你看到或聽說過實際的TTS那麼你可能想下載一個免費版本的ReadPlease 該產品能夠讀取Windows剪貼板中的文本要使用它你只需要簡單地把一些文本粘貼到ReadPlease編輯器中(見圖)並且假定你的PC揚聲器打開了那麼你會聽到文本的播放當前該產品僅能工作在所有的Windows桌面OS版本中但是他們還計劃發行針對MacUnixPalm和Windows CE系統的版本
ReadPlease令人感興趣的地方在於你可以使用ReadPlease編輯器來試驗你的TTS參數選擇例如你可以通過上下移動如圖所示的Speed滑動塊控件來調整發音速度你還可以通過點擊在小臉圖標下方的箭頭按鈕來改變所用的語音
圖ReadPlease 應用程序這個Windows應用程序可能讀任何從剪貼板中粘貼到編輯字段中的文本
你需要什麼呢?Visual StudioNET 微軟語音應用程序SDK
點擊Tools菜單然後選擇Options允許你進一步用該TTS編輯器進行試驗例如你可以調整在段落之間的語音引擎的暫停時間長度升級到ReadPlease Plus版本將可以使你存取另外的一個發音編輯器選項它讓你指定怎樣讀一個特別的詞ReadPlease Plus還包括一個你可以停靠在你的Windows桌面頂部的任務條因此你可以快速地從任何基於文件的應用程序拖動文本到任務欄上並讓它讀給你聽
缺省狀態下該ReadPlease應用程序使用內置的微軟語音(MarkMikeSam或Marilyn)但是你可以選擇性地購買更高質量的AT&T Natural Voices例如在AT&T Natural Voices Starter Pack中提供的語音該Starter包包括K版本的Mike和Crystal它們二者聽起來都優於缺省的微軟聲音
作者注 術語K意味著該抽樣頻率用於創建發生在每秒位的WAV文件另外一種格式是k它可以產生一種更清晰和更為自然的聽覺效果基本上樣本率越高聲音質量好越
二 微軟語音應用程序開發包SDK
在年微軟發行了 Microsoft Speech Server還有一個免費的SDK允許你開發基於Web的運行於Speech Server上的語音程序可以使用SDK來構建電話或只發聲的應用程序其中的計算機對用戶的交互是使用電話來實現的同時你還可以構建多模態應用程序其中由用戶選擇使用語音還是傳統型Web控件作為輸入
微軟TTS引擎通過把單詞拆分成音素來合成文本音素是人類語言的基本單位它們代表一組音正是由它們構成單詞的聲音然後由該TTS引擎分析提取的音素並且把它們轉換成符號用來生成數字音頻語音
你可以使用隨同本文的可下載的示例應用程序(ExploringTextToSpeechcsproj)來試驗微軟TTS引擎可配置的方面該多模態應用程序包含一個Web頁面(見圖)你可以在其中輸入一些文本然後可以點擊一個按鈕來以下面方式聽取文本
作者注在要被播放的文本無法提前知道的情況下使用一TTS引擎是不可避免的然而你可以由錄制音頻來得到更好的音質當音頻質量是關鍵的時你可以使用微軟語音應用程序軟件開發工具箱(SASDK)來錄制音頻例如你可能想使用錄制的音頻來提示用戶信息被記錄的音頻可以被分解成一系列的提示它們在運行時刻再被連接起來
Speak Text Normally提供一種測試基准
Say as an Acronym文本ASP被發作ASP
Say as NameMrJohn Doe被發作Mister John Doe
Say As Date在這種情況中日期格式化為月日年
Say as Web Address在這種情況中文本格式化為一個統一資源標識符(URI)
Say as Digits作為文本輸入的數字被發作一系列的位
High Pitch/Slow Rate文本以高音調慢速發出
Rate Fast/Volume Loud文本以快速高音發出
Low Pitch/Volume Soft文本以低音調適中音量發出
該多模態應用程序使用一提示控件來指定將被播放給用戶的音頻該提示控件包含InlineContent屬性——它可以包含一個或者是Content型或者是Value型的基本Speech控件該Content控件指定一特定的包含存儲的音頻記錄的提示文件該Value控件指定一個HTML Web頁面中的元素該示例應用程序使用一Value控件——它參考一個名為txtText的輸入元素(在圖中的Type some text here域)下面是描述了用於一個提示的標注的HTML
<speechprompt id=prmText runat=server><InlineContent><speechValue runat=server TargetElement=txtText TargetAttribute=value></speechValue></InlineContent></speechprompt>
三 語音合成標注語言
該TTS引擎在怎樣播放由屬性InlineContent參考的文本時作出某些缺省的假設但是開發者能通過使用語音合成標注語言(SSML)元素來控制該TTS引擎生成音頻的方式根據WC協會的推薦SSML是一基於XML的標注語言表列舉出由SASDK所支持的SSML元素
表被支持的SSML元素表中列出由SASDK所支持的SSML元素並且用於控制TTS引擎生成文本的方式
SSML元素 描述ssmlparagraph/ssmlsentence 用於把文本分解成語句或段落
ssmlsayas 用於指定播放文本的方式它能夠接受若干不同的屬性來指定文本的類型
ssmlphoneme 用於控制一個單詞的發音方式
ssmlsub 用於指定一個替代單詞或詞組來代替指定的文本
ssmlemphasis 用於提高放到一單詞或詞組中的重音
ssmlbreak 用於在文本的某些單詞間插入一些暫停
ssmlprosody 用於控制音調速率和音量
ssmlaudio 用於插入被錄制的音頻文件
ssmlmark 用於在文本的某個位置插入一個標記然後可以使用這個標記來表示一事件或觸發一個行為
該示例應用程序說明了sayas和prosodySSML元素的使用在該Defaultaspx頁面上的每個按鈕都相應於一個提示控件這些提示控件在InlineContent元素中包括一ssmlsayas或一個ssmlprosody元素下面示例顯示了針對這些元素之一的HTML標注
<speechprompt id=prmSayAsAcronym runat=server><InlineContent><ssmlsayas type=acronym><speechValue runat=server TargetElement=txtText TargetAttribute=value></speechValue></ssmlsayas></InlineContent></speechprompt>
當用戶點擊這些按鈕之一它執行如下所示的JavaScript
function SayAsAcronym() { prmSayAsAcronymStart()}
在上面的示例中名為prmSayAsAcronym的提示包括了ssmlsayas元素它指定任何包含在txtText輸入元素中的文本都應該被以每個單詞的第一個字母方式發出因此如果你輸入ASP到文本元素中並且點擊Say As Acronym那麼該TTS引擎將讀每個字母
為了用該示例應用程序進行試驗你可以輸入一些文本片斷然後點擊每一個按鈕來看一下該TTS引擎是怎樣解釋文本的我主張你改變元素值並且用每一個控件生成的方式進行試驗SASDK提供給開發者關於該TTS引擎怎樣生成文本的良好控件因此試驗可能會導致出現一種更為自然的基於語音的應用程序
From:http://tw.wingwit.com/Article/program/net/201311/13239.html