diff --git a/src/blacksound/threadedtonepairplayer.cpp b/src/blacksound/threadedtonepairplayer.cpp index adc01bb38..18e94332e 100644 --- a/src/blacksound/threadedtonepairplayer.cpp +++ b/src/blacksound/threadedtonepairplayer.cpp @@ -28,12 +28,16 @@ namespace BlackSound void CThreadedTonePairPlayer::play(int volume, const QList &tonePairs) { + QPointer myself(this); QMutexLocker ml(&m_mutex); if (m_audioOutput->state() != QAudio::StoppedState) { return; } m_bufferData = this->getAudioByTonePairs(tonePairs); m_audioOutput->setVolume(static_cast(0.01 * volume)); - QTimer::singleShot(0, this, &CThreadedTonePairPlayer::playBuffer); + QTimer::singleShot(0, this, [ = ] + { + if (myself) { myself->playBuffer(); } + }); } bool CThreadedTonePairPlayer::reinitializeAudio(const CAudioDeviceInfo &device) diff --git a/src/blacksound/threadedtonepairplayer.h b/src/blacksound/threadedtonepairplayer.h index ca72ae6f5..9b5123890 100644 --- a/src/blacksound/threadedtonepairplayer.h +++ b/src/blacksound/threadedtonepairplayer.h @@ -68,9 +68,9 @@ namespace BlackSound BlackMisc::Audio::CAudioDeviceInfo m_deviceInfo; QAudioOutput *m_audioOutput = nullptr; - QByteArray m_bufferData; - QBuffer m_buffer; - QAudioFormat m_audioFormat; + QByteArray m_bufferData; + QBuffer m_buffer; + QAudioFormat m_audioFormat; QMap m_tonePairCache; mutable QMutex m_mutex { QMutex::Recursive }; };