求高手指点指点:多线程能解决如下描述的,合成的语音与动画同时播放问题么?

yangyi_33855 2013-03-17 10:54:21
小弟现在在学习用Opengl和Microsoftware SAPI在VC++中做动画语音方面的东西,希望能实现程序一边能做动画(在OnTimer()中调用Opengl绘制的模型),一边合成语音(用SAPI实现)。
调用动画和语音的按钮控制单击响应函数大致如下:
OnClickButton()
{
……………………
……………………
Animation();//动画函数
Speak(); //语音合成函数
……………………
……………………
}
问题:运行程序后,点击按钮,只有合成的声音在播放,在播放声音期间,做动画的那个界面里面没有反应,而且什么都不能点,比如说按钮、编辑框(输入文字)。等声音播放完后,动画才开始做,界面上的各个按钮才能使用。是不是说用SAPI合成语音的话,在合成语音时,这个Speak()函数把进程都占了,如果要让程序一边显示动画,一边合成语音,多线程技术是不是就能解决(因为我听同学说,多线程是啥多个线程交替运行,我想这样是不是还是和现在的问题一样,语音完了,才做动画),或者说再用SAPI合成语音时,有什么函数、方法可以避免合成语音对进程的独占。
...全文
206 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜牛 2013-03-18
  • 打赏
  • 举报
回复
这个别谢我,建议用一个API之前好好看看文档。
yangyi_33855 2013-03-18
  • 打赏
  • 举报
回复
引用 2 楼 Mackz 的回复:
如果SAPI这么弱智,放个声音就要阻塞进程,也就没有实用价值了。 pVoice->Speak( theString, SPF_ASYNC, NULL); 可以异步播放!不会阻塞当前进程的! 另外,动画用定时器的话,效率可是太低了,建议你查阅一些游戏循环的代码。
老给力了,马上去试试,实在是太谢谢您了!
MoreWindows 2013-03-17
  • 打赏
  • 举报
回复
可以解决,不过要做好同步控制。
菜牛 2013-03-17
  • 打赏
  • 举报
回复
如果SAPI这么弱智,放个声音就要阻塞进程,也就没有实用价值了。 pVoice->Speak( theString, SPF_ASYNC, NULL); 可以异步播放!不会阻塞当前进程的! 另外,动画用定时器的话,效率可是太低了,建议你查阅一些游戏循环的代码。

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧