線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1899
推到 Plurk!
推到 Facebook!

如何分散系統的 loading (Windows Speech SDK)

答題得分者是:daldal
Eigen
初階會員


發表:19
回覆:36
積分:26
註冊:2002-12-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-09-11 13:27:11 IP:60.249.xxx.xxx 訂閱
如何分散系統的 loading
請指教,謝謝
我用 Windows Speech SDK 5.1 配合 bcb6 pro
做了一個發音的功能。

Windows Speech SDK 5.1 我是用 project ->import type library選擇 Microsoft Speech Object Library (Version 5.1)
->install ,之後會在 ActiveX 的元件中,產出許多新的元件,我將spVoice 拉到 form 之中
用以下四行指令很容易就發出聲音來
void __fastcall TForm1::SpeakString(String s_Str)
{
ISpeechObjectTokensPtr sots;
WideString ws_CreateSound = (WideString)s_Str;
SpVoice1->set_Volume(300);
SpVoice1->Speak(ws_CreateSound,SVSFDefault);
}
主要是參考 http://dn.codegear.com/cn/article/29583 的方式做出來的

原本我用是 一個button 去啟動 timer ,定時將 文字念出來
我來我發現,在念的時候,整個form 都不會動。
後來我改用 TThread ,將發聲的程序移到 thread 之中,但是 form 還是不會動
這是怎麼一回事?
原本我以為是 Synchronize 中的程序有用到 form 之中的原件,所造成
我將整個 Synchronize 程序單純到只重複念單字,還是一樣
我也試過 在 thread 建立時,調降 priority
SpeechThread = new SpeechEngine(false);
SpeechThread->Priority=tpLowest;
SpeechThread->Priority=tpIdle;
結果還是一樣,只要發聲的當下,form 完全不會動

請教一下,我該怎麼做,才對? 謝謝
daldal
高階會員


發表:6
回覆:102
積分:226
註冊:2007-06-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-09-17 21:00:47 IP:220.130.xxx.xxx 未訂閱
這個元件本來就有自己獨立的執行緒囉,
不用用到多執行緒去執行
只要把 SpVoice1->Speak(ws_CreateSound,SVSFlagsAsync);
就可以囉~

另外他的SpeechVoiceSpeakFlags還有以下幾種

[code cpp]
SVSFDefault = 0,
SVSFlagsAsync = 1,
SVSFPurgeBeforeSpeak = 2,
SVSFIsFilename = 4,
SVSFIsXML = 8,
SVSFIsNotXML = 16,
SVSFPersistXML = 32,
SVSFNLPSpeakPunc = 64,
SVSFNLPMask = 64,
SVSFVoiceMask = 127,
SVSFUnusedFlags = 0xFFFFFF80
[/code]

所以前面的WideString可以是檔案來源、XML來源等等
要再深入的話,可以到MSDN研究
Eigen
初階會員


發表:19
回覆:36
積分:26
註冊:2002-12-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-09-18 18:26:08 IP:60.249.xxx.xxx 訂閱
非常感謝,ok了



===================引 用 daldal 文 章===================
這個元件本來就有自己獨立的執行緒囉,
不用用到多執行緒去執行
只要把 SpVoice1->Speak(ws_CreateSound,SVSFlagsAsync);
就可以囉~

另外他的SpeechVoiceSpeakFlags還有以下幾種

[code cpp]
SVSFDefault = 0,
SVSFlagsAsync = 1,
SVSFPurgeBeforeSpeak = 2,
SVSFIsFilename = 4,
SVSFIsXML = 8,
SVSFIsNotXML = 16,
SVSFPersistXML = 32,
SVSFNLPSpeakPunc = 64,
SVSFNLPMask = 64,
SVSFVoiceMask = 127,
SVSFUnusedFlags = 0xFFFFFF80
[/code]

所以前面的WideString可以是檔案來源、XML來源等等
要再深入的話,可以到MSDN研究
系統時間:2024-04-16 22:35:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!