最近玩語(yǔ)音朗讀的時(shí)候比較多,也在兩個(gè)軟件中應(yīng)用過(guò)。其實(shí)大多語(yǔ)音朗讀的代碼還是很好寫的,只是像判斷TTS語(yǔ)音朗讀是否結(jié)束或者當(dāng)前語(yǔ)音引擎的狀態(tài)稍微要查找一下參數(shù)。這里記錄一下:
原本在網(wǎng)上查到的一條關(guān)于判斷TTS朗讀完成事件的代碼WaitForSingleObject(spvoice.SpeakCompleteEvent, 200);在delphi 中使用時(shí)并沒(méi)有達(dá)到原本看似應(yīng)該有的功效,測(cè)試時(shí)發(fā)現(xiàn)這東西只是在TTS合成朗讀流后就返回了,說(shuō)白了就是TTS剛要朗讀,就被判定成朗讀完成了。仔細(xì)查找了一下spvoice的參數(shù),里面有個(gè)statdus屬性,這個(gè)返回的對(duì)象中可以獲取一些有用的屬性參數(shù)如:RunningState(運(yùn)行狀態(tài)), inputWordLegth(朗讀句子所有詞匯長(zhǎng)度總和),inputWordPosition(當(dāng)前朗讀詞匯的末位置)……
其中RunningState有三個(gè)狀態(tài): 朗讀文本被全部渲染合成后返回 SRSEDone = 1 正在朗讀中會(huì)返回 SRSEIsSpeaking = 2暫停朗讀時(shí)會(huì)返回0
利用這三個(gè)屬性就可以判斷朗讀是否已經(jīng)完成,加兩個(gè)計(jì)時(shí)器,朗讀句子開(kāi)始時(shí),啟動(dòng)判斷朗讀狀態(tài)的計(jì)時(shí)器,完成后再重新激活計(jì)時(shí)器進(jìn)行朗讀:
聯(lián)系客服