I'm wondering is there a simple way in Qt to play sound without blocking the main thread ?
I know that normaly I should start a seperate thread to do this. But maybe there is a shortcut ? :)
Thanks for help.
I'm wondering is there a simple way in Qt to play sound without blocking the main thread ?
I know that normaly I should start a seperate thread to do this. But maybe there is a shortcut ? :)
Thanks for help.
The standard QSound and the Phonon library both have significant problems when it comes to playing sound. They both require the main message loop which means either a slight block in the main thread or a delay in playing the sound. Ultimately they both use a background thread, but the lag is easy to notice. Not to mention that Phonon has questionable support on many platforms.
I've worked with both for a while and tried to a build a simple sound system for playing user interface sounds (just to beep and pop occasionally). It just isn't possible using the standard Qt Library.
I'd recommend using OpenAL, which I eventually did. It's a relatively straight-forward library and seems to have good cross-platform support. The other option is SDL_mixer, but OpenAL seemed easier to get installed on Windows (probably not by much though). So basically if
QSound::play
doesn't do what you want then the standard Qt API won't work for you.Another important note, don't bother trying to fix the Qt sound api using a separate thread. It won't work. Phonon at least requires to be instantiated and called in the main thread.
http://doc.qt.nokia.com/latest/qsound.html
It seems like this is an asynchronous operation, so it shouldn't block your main thread.
QMediaPlayer shouldn't block your thread.
I have been working with QT sound systems a lot, especially with the thread issues.
This solutions works for me:
Examples:
http://doc.qt.io/qt-5/qtmultimediawidgets-player-player-cpp.html
https://www.youtube.com/watch?v=DS7CDpIrwN4