我想知道 Qt 中是否有一种简单的方法可以在不阻塞主线程的情况下播放声音?
我知道通常我应该启动一个单独的线程来执行此操作。但也许有捷径? :)
感谢您的帮助。
最佳答案
标准 QSound 和 Phonon 库在播放声音时都存在严重问题。它们都需要主消息循环,这意味着主线程中的轻微阻塞或播放声音的延迟。最终他们都使用后台线程,但很容易注意到延迟。更不用说 Phonon 在许多平台上的支持问题。
我已经与两者合作了一段时间,并尝试构建一个简单的声音系统来播放用户界面声音(只是偶尔发出哔哔声和爆音)。使用标准 Qt 库是不可能的。
我建议使用 OpenAL,我最终也这样做了。这是一个相对简单的库,似乎具有良好的跨平台支持。另一个选项是 SDL_mixer,但 OpenAL 似乎更容易安装在 Windows 上(虽然可能不多)。所以基本上,如果 QSound::play
没有执行您想要的操作,那么标准 Qt API 将无法为您工作。
另一个重要说明,不要费心尝试使用单独的线程修复 Qt 声音 api。它不会工作。 Phonon 至少需要在主线程中被实例化和调用。
关于c++ - Qt:如何在不阻塞主线程的情况下播放声音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5600515/