Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/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[])
    {
        qRegisterMetaType<Enums::MqttCommand>("Enums::MqttCommand");
        qRegisterMetaType<Enums::RouteState>("Enums::RouteState");
    
        QApplication a(argc, argv);
    
        Logger          logger;
        RouteManager    routeManager;
        WindowManager   windowManager;
        QMediaPlayer    clickPlayer;
        QMediaPlayer    alarmPlayer;
    
        MQTTclient      *mqttClient = new MQTTclient;
        QThread         *mqttThread = new QThread;
    
        clickPlayer.setMedia(QUrl("qrc:/sounds/click.wav"));
        alarmPlayer.setMedia(QUrl("qrc:/sounds/alarm.wav"));
    
        alarmPlayer.setVolume(0);
    
        mqttClient->moveToThread(mqttThread);
        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);
    
        windowManager.initWindows();
        routeManager.initRoutes();
    
        mqttThread->start();
    
        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.