fixed sound on linux using phonon. This should be extensible to all unix systems

This commit is contained in:
csoler 2016-01-20 23:25:08 -05:00
parent fc3606c18e
commit e25787bcd5
3 changed files with 32 additions and 4 deletions

View File

@ -37,6 +37,14 @@
#define GROUP_ENABLE "Enable"
#define GROUP_SOUNDFILE "SoundFilePath"
#ifdef UBUNTU
#include <phonon/audiooutput.h>
#include <phonon/mediaobject.h>
#include <phonon/mediasource.h>
Phonon::MediaObject *SoundManager::mediaObject = NULL ;
#endif
SoundManager *soundManager = NULL;
SoundEvents::SoundEvents()
@ -234,12 +242,24 @@ void SoundManager::playFile(const QString &filename)
}
QString playFilename = realFilename(filename);
#ifdef UBUNTU
// The media object is only deleted before being used, so as to avoid a memory leak. We cannot delete it after calling play() because the
// playing is asynchronous. The way to do this properly would be to connect the finish() signal of the player to some slot that delete it,
// assuming it's not done in a static method like now.
if(mediaObject != NULL)
delete mediaObject ;
mediaObject = Phonon::createPlayer(Phonon::NotificationCategory, Phonon::MediaSource(QUrl::fromLocalFile(filename)));
mediaObject->play();
#else
#if QT_VERSION >= QT_VERSION_CHECK (5, 0, 0)
if (!QAudioDeviceInfo::availableDevices(QAudio::AudioOutput).isEmpty()) {
if (!QAudioDeviceInfo::availableDevices(QAudio::AudioOutput).isEmpty())
#else
if (QSound::isAvailable()) {
if (QSound::isAvailable())
#endif
QSound::play(playFilename);
}
#endif
}

View File

@ -30,6 +30,10 @@
#define SOUND_MESSAGE_ARRIVED "MessageArrived"
#define SOUND_DOWNLOAD_COMPLETE "DownloadComplete"
#ifdef UBUNTU
#include <phonon/mediaobject.h>
#endif
class SoundEvents
{
public:
@ -84,9 +88,12 @@ public:
static QString eventFilename(const QString &event);
static void setEventFilename(const QString &event, const QString &filename);
private:
SoundManager();
#ifdef UBUNTU
static Phonon::MediaObject *mediaObject ;
#endif
};
extern SoundManager *soundManager;

View File

@ -66,6 +66,7 @@ linux-* {
PKGCONFIG *= x11 xscrnsaver
LIBS *= -lphonon
LIBS *= -rdynamic
DEFINES *= HAVE_XSS # for idle time, libx screensaver extensions
DEFINES *= UBUNTU