Partage
  • Partager sur Facebook
  • Partager sur Twitter

Avertissement sous qt

C++ system dans fenêtre qt

Sujet résolu
    30 mai 2024 à 18:18:15

    Bonjour,

    J'ai écris en c++ une petite appli qui modélise les sons.

    De manière à rendre cette appli ludique, j'ai créé une version graphique sous qt.

    Avant d'intégrer des rythmes standard aux tests je me suis aperçu que dès que je composais des fichiers audio plus lourd,  au moment de la lecture qt indiquait que l'application ne répondait pas et demande de choisir d'attendre ou de fermer l'application. Ce message ne correspond à rien l'application fonctionne très bien, dès la fin de la lecture, le message disparait.

    L'application est en téléchargement ici : www.letime.net/son/ap/archive.tar.gz

    elle joue les sons en utilisant system et play de libsox

    A la relecture, je m’aperçois que j'ai bien détaillé le problème, mais j'ai oublié de demander comment le résoudre.

    En d'autres mots, je cherche à pouvoir lire les fichiers audio sans que qt affiche ce message, en fait que qt se mette en pause en attendant la fin de la lecture du fichier audio.

    Je lance la lecture du fichier audio, à l'aide d'un clique sur un bouton.audiojo

    -
    Edité par pierrejocelynleonraoulandre 30 mai 2024 à 18:24:55

    • Partager sur Facebook
    • Partager sur Twitter
      30 mai 2024 à 20:47:38

      Quel OS ?

      Cela ressemble plus à un problème Windows que Qt.

      Si c'est sous Windows, je pense que vous avez peut-être bloqué la pompe à message.

      Dans le sous-système "window" de Windows, les applications doivent être en mesure de répondre dans un certain délai à des messages système.

      Contrainte qui n'existe pas dans le sous-système "console" de Windows.

      Vous utilisez vraisemblablement des "API" pensées pour utiliser des thread auxiliaires et pas le thread principal.

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        30 mai 2024 à 22:12:36

        Merci pour la réponse.

        si j'ai bien compris, il faut que j'utilise l'exemple trouvé dans "Les threads sans maux de tête", mais au moment il faut que je regarde plus pour comprendre

        J'ai essayé en intégrant le lecteur audio qt, cela n'a rien changé au problème (mais je crois que c'était un reste du système audio de qt5).

        j'ai perdu le code un peu vite en faisant le ménage quand j'ai utilisé synaptic pour enlever toute trace de qt5, je suis sous qt6

        Concernant l'OS, je suis sous mantic, avec qt6 en open  source, et libsox, je suis pas sure d'avoir mis libsox dans la dernière version, mais d'habitude je l'ajoute.

        Normalement dans l'archive, je place les sources accompagné du répertoire debug de compilation

        J'envisage plusieurs solutions, au début de créer un fork, ou un système pause, ou encore de récupérer un signal de sortie à la fin de la lecture

        -
        Edité par pierrejocelynleonraoulandre 1 juin 2024 à 5:45:12

        • Partager sur Facebook
        • Partager sur Twitter
          1 juin 2024 à 22:46:30

          première tentative sur les threads, c'est un raté, la fenêtre d'alerte apparait dès que la lecture du fichiers audio commence à durer plusieurs secondes, comme avant

          J'ai essayé en premier ce qui m'a semblé le plus facile

          //#include <QWaitCondition>
          #include <QMutex>



          QMutex mutex;
          
          void MainWindow::on_pushButton_2_clicked()//wav forme 1 : 200 ondes unité de temps entre 20 et 25
          {
              mutex.lock();
              if(compte <1){
                  execu();
                  compte++;
              }   else {
                  execu1();
              }
              mutex.unlock();
          }
          

          Peut-être il faut que je place mutex juste avant play et non pas avant la fonction, je vais essayer

          Cordialement

          P.S.

          QMutex mutex;
          
          void MainWindow::on_pushButton_4_clicked()
          {
              mutex.lock();
              std::system(("sox audiojo.wav -c 2 josox1.ogg && play josox1.ogg chorus 0.5 0.9 50.0 0.4 0.25 2.0 -t 60.0 0.32 0.4 2.3 -t 40.0 0.3 0.3 1.3 -s");
              mutex.unlock();
          }
          

          avec ce code ça  ne change rien, j'ai toujours la fenêtre qui apparait pendant la lecture du fichier audio

          et si j'utilise Qmedia j'ai pas la fenêtre mais le son ne se joue pas

          void MainWindow::on_pushButton_26_clicked() //lancer la boite à rythme
          {
            QMediaPlayer*boite = new QMediaPlayer() ;
            boite->setSource(QUrl::fromLocalFile("josox3.ogg"));
            boite->play();
          }



           Peut-être que c'est lié au retour de gstreamer.

          Je viens de découvrir qu'à chaque lecture audio gstreamer renvoyait

          g_object_unref: assertion 'G_IS_OBJECT (object)' failed

          mais que c'est un truc dans les entrailles de qt qui utilise gstreamer, que ça peut se corriger mais comme je ne suis pas sure que cela vienne de là, je préfère ne pas y toucher


          -
          Edité par pierrejocelynleonraoulandre 2 juin 2024 à 5:47:33

          • Partager sur Facebook
          • Partager sur Twitter
            2 juin 2024 à 15:43:18

            Bonjour,

            je poste en résolu.

            Des heures et des heures de lectures pour plein de tests qui m'ont rien apporté.

            J'ai décidé d'avoir une autre approche, l'approche du dernier recourt, à savoir une approche empirique.

            J'ai testé tous les slots, et je suis tombé sur un slot qui ne m'ouvre pas la fenêtre, c'est

            void MainWindow::on_pushButton_21_released()
            {
                    std::system("sox audiojo.wav -c 2 josox13.ogg && play josox13.ogg  tremolo 5");
            }

            Comme j'ai pas mal de code à corriger, je chercherai à comprendre pourquoi plus tard, au moment le comment me suffit.

            Cordialement

            • Partager sur Facebook
            • Partager sur Twitter

            Avertissement sous qt

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            • Editeur
            • Markdown