程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 在Visual C++6.0中使用Text-to-Speech

在Visual C++6.0中使用Text-to-Speech

編輯:關於VC++

一、前言

網上很多程序都可以閱讀英文和中文,典型的就是金山詞霸,最近找了一下,發現網上在VC這方面的資料不是很多,好些程序都是基於API的(比如VCKBASE ::首頁 >> 文檔中心 >> 在線雜志 >> 音頻技術 中的文章"文本語音轉換入門"作者:Suyu),加之我在 VCKBASE 獲益良多,現在想回報一二,所以就寫了個基於MFC的程序,希望拋磚引玉,請高手指點。

二、安裝TTS引擎

要使用TTS必須安裝微軟的TTS引擎,這點Suyu已經說明了,作為用戶需要下載兩個文件MSTTS.EXE和SPCHAPI.EXE,如果需要閱讀中文,還需要下載中文發音包SimpChinese Speech Package。這三個軟件都可以在微軟主頁上找到,如果您發布程序,則需要將其打包在一起。作為程序員,您可以去微軟主頁下載Microsoft Speech SDK, version 5.1,順便把中文和日文的語言包SpeechSDK51LangPack.exe下載回來。

三、建立程序項目

1. 建立一個MFC AppWizard(exe)

2. 在step1裡面選擇Dialog Based

3. 在step2裡面把Automation選項勾上(必需這麼做)

4. 結束

四、導入類型庫

查找 spai.dll,將其拷貝到你程序的 res 目錄(不拷貝也行 ^_^),打開 MFC ClassWizard,選擇 Automation 頁,單擊按鈕"Add Class…",選擇"From a type library…",選中"sapi.dll"文件,這時系統會出現 confirm Classes 對話框,詢問將要導入的類,呵呵,反正閒著也是閒著,全選中吧。到此,准備工作全部完成。

五、示例程序

我寫了個演示程序,界面如下:

單擊"Speak English"將女聲讀出"apple",單擊"Speak Chinese"將男聲讀出"蘋果",

單擊"English"和"Chinese"在下面的Input Text框裡面分別將出現英文和中文,單擊"Read"即可讀出,單擊"Stop"即可停止閱讀。"Rate"表示閱讀速度,"+"、"-"可以改變;"Volume"表示音量大小,"+"、"-"可以改變。"Voice"列出了系統當前有的聲音,但是,實際上我的計算機只能閱讀四種,我列在了右邊"Mary,Mike,Sam,Chinese",關於這點,原因未知,請高手賜教。要注意的是,如果輸入中文,要首先在Voice裡面選擇chinese後才能正確發聲,讀英文時也要選擇非中文才可以。

發聲的關鍵代碼為:

CLSID CLSID_SpVoice;  // class ID for the SAPI SpVoice object
  LPDISPATCH pDisp;    // dispatch interface for the class
  ISpeechVoice voice;   // use the MFC Class Wizard generated wrapper
  CLSIDFromProgID(L"SAPI.SpVoice", &CLSID_SpVoice);
  voice.CreateDispatch(CLSID_SpVoice);
  pDisp = voice.m_lpDispatch;
  HRESULT hr = pDisp->QueryInterface(CLSID_SpVoice, (void**)&voice.m_lpDispatch);
  if (hr == S_OK) {
    pDisp->Release();
  }
  else {
    voice.AttachDispatch(pDisp, TRUE);
  }
  voice.Speak("Hello World", 1);  // asynchronous call to Speak method of ISpeechVoice interface

我的程序大家詳見代碼。

六、拋磚引玉

我現在有幾個問題希望和大家一起討論,請高手不吝賜教。

1. 如何調節語調。聲音之所以有Mary和Sam的 區別,實際上是語調不同。

2. 閱讀時語音和文本同步,即讀到哪個單詞就把哪個單詞高亮顯示。

3. 如何把 Windows 上的 TTS 移植到 PocketPC 上面。這個問題是我最為關心的,如果有高人知道,小生有禮再有禮,一定告訴我啊,謝謝謝謝再謝謝。

小生的 Email:[email protected]

本文配套源碼

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