2008年(884)
分类: C/C++
2008-08-06 09:56:45
四、导入类型库
查找 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我的程序大家详见代码。