Qt:如何播放阻塞主线程的声音?

Seb*_*sza 3 c++ audio qt qt4

我想知道在Qt中有一个简单的方法来播放声音而不会阻塞主线程吗?

我知道,我应该开始一个单独的线程来做到这一点.但也许有捷径?:)

感谢帮助.

edA*_*a-y 10

标准QSound和Phonon库在播放声音方面都存在重大问题.它们都需要主消息循环,这意味着主线程中的轻微阻塞或播放声音的延迟.最终他们都使用后台线程,但滞后很容易被注意到.更不用说Phonon在许多平台上都有可疑的支持.

我已经和他们合作了一段时间,并尝试构建一个简单的声音系统来播放用户界面声音(只是偶尔发出哔哔声和流行音乐).使用标准Qt库是不可能的.

我建议使用OpenAL,我最终做了.它是一个相对简单的库,似乎有很好的跨平台支持.另一个选项是SDL_mixer,但OpenAL似乎更容易在Windows上安装(尽管可能不是很多).所以基本上如果QSound::play没有做你想要的,那么标准的Qt API将不适合你.


另一个重要的注意事项,不要试图使用单独的线程来修复Qt声音api.它不会起作用.Phonon至少需要在主线程中实例化并调用.