c++ - Qt:如何在不阻塞主线程的情况下播放声音?

标签 c++ qt qt4 audio

我想知道 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/

相关文章:

c++ - 如何为 drawText 旋转文本?

c# - C++中指针和C#中引用类型的区别

c++ - 如果我知道它的地址,我能以某种方式访问​​它吗?

Qt 10000 Blade

c++ - 自定义字符串排序

c++ - 访问 Qt Designer 创建的 QWizardPage

windows-7 - Qt 灰显并禁用 MainWindow 中的所有操作

c++ - 如何将二维数组传递给C++中的函数

c++ - 为什么 unique_ptr 不能推断删除器的类型?

qt - 如何为跨平台 Qt 应用程序指定等宽字体?