diff --git a/cockatrice/src/settingscache.cpp b/cockatrice/src/settingscache.cpp index b3aa2d2e..57e15b5f 100644 --- a/cockatrice/src/settingscache.cpp +++ b/cockatrice/src/settingscache.cpp @@ -191,6 +191,7 @@ void SettingsCache::setSoundEnabled(int _soundEnabled) { soundEnabled = _soundEnabled; settings->setValue("sound/enabled", soundEnabled); + emit soundEnabledChanged(); } void SettingsCache::setSoundPath(const QString &_soundPath) diff --git a/cockatrice/src/settingscache.h b/cockatrice/src/settingscache.h index e1ef13d6..c4c764aa 100644 --- a/cockatrice/src/settingscache.h +++ b/cockatrice/src/settingscache.h @@ -22,6 +22,7 @@ signals: void horizontalHandChanged(); void invertVerticalCoordinateChanged(); void minPlayersForMultiColumnLayoutChanged(); + void soundEnabledChanged(); void soundPathChanged(); void ignoreUnregisteredUsersChanged(); private: diff --git a/cockatrice/src/soundengine.cpp b/cockatrice/src/soundengine.cpp index 247567cc..35d179fd 100644 --- a/cockatrice/src/soundengine.cpp +++ b/cockatrice/src/soundengine.cpp @@ -6,20 +6,14 @@ #include SoundEngine::SoundEngine(QObject *parent) - : QObject(parent) + : QObject(parent), audio(0) { - inputBuffer = new QBuffer; - QAudioFormat format; - format.setFrequency(44100); - format.setChannels(1); - format.setSampleSize(16); - format.setCodec("audio/pcm"); - format.setByteOrder(QAudioFormat::LittleEndian); - format.setSampleType(QAudioFormat::SignedInt); - audio = new QAudioOutput(format, this); + inputBuffer = new QBuffer(this); connect(settingsCache, SIGNAL(soundPathChanged()), this, SLOT(cacheData())); + connect(settingsCache, SIGNAL(soundEnabledChanged()), this, SLOT(soundEnabledChanged())); cacheData(); + soundEnabledChanged(); } void SoundEngine::cacheData() @@ -34,9 +28,29 @@ void SoundEngine::cacheData() } } +void SoundEngine::soundEnabledChanged() +{ + if (settingsCache->getSoundEnabled()) { + qDebug("SoundEngine: enabling sound"); + QAudioFormat format; + format.setFrequency(44100); + format.setChannels(1); + format.setSampleSize(16); + format.setCodec("audio/pcm"); + format.setByteOrder(QAudioFormat::LittleEndian); + format.setSampleType(QAudioFormat::SignedInt); + audio = new QAudioOutput(format, this); + } else if (audio) { + qDebug("SoundEngine: disabling sound"); + audio->stop(); + audio->deleteLater(); + audio = 0; + } +} + void SoundEngine::playSound(const QString &fileName) { - if (!settingsCache->getSoundEnabled()) + if (!audio) return; audio->stop(); diff --git a/cockatrice/src/soundengine.h b/cockatrice/src/soundengine.h index d65b3f2d..313f4cd4 100644 --- a/cockatrice/src/soundengine.h +++ b/cockatrice/src/soundengine.h @@ -16,6 +16,7 @@ private: QAudioOutput *audio; private slots: void cacheData(); + void soundEnabledChanged(); public: SoundEngine(QObject *parent = 0); public slots: