判断TTS语音朗读是否结束

本文介绍了在Delphi中判断TTS语音朗读是否结束的方法。通过研究spvoice对象的status属性,尤其是RunningState参数,可以确定TTS的运行状态,如SRSEDone、SRSEIsSpeaking等,从而实现对语音朗读完成的准确判断。并提到WaitForSingleObject函数在实际应用中的不足。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近玩语音朗读的时候比较多,也在两个软件中应用过。其实大多语音朗读的代码还是很好写的,只是像判断TTS语音朗读是否结束或者当前语音引擎的状态稍微要查找一下参数。这里记录一下:

原本在网上查到的一条关于判断TTS朗读完成事件的代码WaitForSingleObject(spvoice.SpeakCompleteEvent, 200);在delphi 中使用时并没有达到原本看似应该有的功效,测试时发现这东西只是在TTS合成朗读流后就返回了,说白了就是TTS刚要朗读,就被判定成朗读完成了。仔细查找了一下spvoice的参数,里面有个statdus属性,这个返回的对象中可以获取一些有用的属性参数如:RunningState(运行状态), inputWordLegth(朗读句子所有词汇长度总和),inputWordPosition(当前朗读词汇的末位置)……

其中RunningState有三个状态:    朗读文本被全部渲染合成后返回 SRSEDone = 1    正在朗读中会返回 SRSEIsSpeaking = 2 暂停朗读时会返回0

利用这三个属性就可以判断朗读是否已经完成,加两个计时器,朗读句子开始时,启动判断朗读状态的计时器,完成后再重新激活计时器进行朗读:


procedure TForm1.Timer1Ti
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值