我有一个相当简单的问题,我似乎无法解决。
我想写一个幻灯片程序,每次幻灯片更改时也会播放音频文件。这个音频文件的长度各不相同,我不想编程循环播放下一个条目/图片,直到声音播放完毕。
目前我已经实施了一个循环:
void UI_BRAINWASH::PlaySound_top()
{
wxString tmppath(parent->get_currentdirect()+parent->current_db.get_card(m_index)->get_topentryaudiopath());
ISound* firstsound = this->engine->play2D(tmppath.mb_str(), false, false, true);
while(engine->isCurrentlyPlaying(tmppath.mb_str()))
{
StaticTextTop->GetParent()->Update();
//wxSleep(3);
}
m_timer->Start(1000);
}
并按预期循环输入条目,一切都很花哨......
但是,我希望能够通过按Escape等其他内容来中止该程序,但是while循环显然阻碍了我做到这一点。 我还注意到,在循环浏览图片时,我无法移动窗口或关闭程序。
所以我查看了线程和wxIdleevent类。 in:wxwidgets / samples / threads /是“工作者线程”的一个例子,这似乎是我需要的。
我现在的问题是:对于简单的幻灯片,线程是不是有点过分? 有没有其他/更好的方式循环我的条目 - 等待声音播放,更新gui,还能够仍然移动窗口?
答案 0 :(得分:0)
什么是引擎?
大多数播放声音的API都能够开始播放声音文件,然后立即返回。他们将在声音结束时发送一个事件。他们还会打电话来打断仍在播放的声音。这就是你想要的。
您应检查所使用的API的文档并找到此功能。如果该功能不可用,那么您需要找到其他API,大多数都可以。