Important: Please read the Qt Code of Conduct -

QMediaplayer randomly plays part of the audio in a loop

  • Hello!
    I ran into an unexpected problem while using QMediplayer. Sometimes, when receiving a signal "play", the player starts to play a part of the audio file in a loop for a while . I have not been able to figure out what exactly affects this.
    I also added the logging on the call of the signal to play, and I am sure that this signal comes only once.

    I tried moving both QMediplayer instances to separate threads, but that didn't solve the problem.
    Build with Qt 5.12.6 MinGW 32bit

    #include <QApplication>
    #include <QMediaPlayer>
    #include <QThread>
    #include <QMetaType>
    #include "logger.h"
    #include "routemanager.h"
    #include "mqttclient.h"
    #include "windowmanager.h"
    #include "routewindow.h"
    int main(int argc, char *argv[])
        QApplication a(argc, argv);
        Logger          logger;
        RouteManager    routeManager;
        WindowManager   windowManager;
        QMediaPlayer    clickPlayer;
        QMediaPlayer    alarmPlayer;
        MQTTclient      *mqttClient = new MQTTclient;
        QThread         *mqttThread = new QThread;
        QObject::connect(mqttThread, &QThread::started, mqttClient, &MQTTclient::initClient);
        QObject::connect(mqttThread, &QThread::finished, mqttClient, &MQTTclient::deleteLater);
        QObject::connect(mqttThread, &QThread::finished, mqttThread, &QThread::deleteLater);
        QObject::connect(&windowManager, &WindowManager::addToLog,              &logger,       &Logger::addToLog);
        QObject::connect(&windowManager, &WindowManager::checkSound,            &alarmPlayer,  &QMediaPlayer::play);
        QObject::connect(&windowManager, &WindowManager::setVolume,             &alarmPlayer,  &QMediaPlayer::setVolume);
        QObject::connect(&windowManager, &WindowManager::click,                 &clickPlayer,  &QMediaPlayer::play);
        QObject::connect(&routeManager, &RouteManager::playAlarm,           &alarmPlayer,   &QMediaPlayer::play);
        QObject::connect(&a, &QApplication::lastWindowClosed, mqttThread, &QThread::quit);
        QObject::connect(&a, &QApplication::aboutToQuit,      mqttThread, &QThread::quit);
        return a.exec();

  • It seems that the problem is somehow related to the work of the Windows defender. After disabling it, the problem did not appear yet.

  • The problem was in the Windows firewall. I still don't understand why this was affecting the sound, but disabling the firewall did the trick.