IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Problème de volume sonore avec QAudioOutput en Qt6

  1. #1
    Membre régulier Avatar de clampin
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 96
    Points : 105
    Points
    105
    Par défaut Problème de volume sonore avec QAudioOutput en Qt6
    Bonjour,

    Je réalise pour moi une petite application qui me permet de sélectionné dans une liste la radio que je veux écouter (rien d'orignal, je sais).

    J'ai déjà réalisé cette application en Qt5. Mais depuis je suis passé a Qt6. Je l'ai refaite depuis le début. Mon soucis, je ne parviens pas a faire varier le volume.

    j'ai donc un QSlider qui doit faire varier le volume. Mais ça le met soit a Zéro, soit a 100%. Je ne sais pas comment le mettre par exemple a 50% où 20%.

    Comment procéder ?

    Le code mon programme :

    Mon fichier FenetrePrincipale.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    #ifndef FENETREPRINCIPALE_H
    #define FENETREPRINCIPALE_H
     
    #include <QMainWindow>
    #include <QFile>
    #include <QMessageBox>
    #include <QMediaPlayer>
    #include <QAudioOutput>
     
     
    QT_BEGIN_NAMESPACE
    namespace Ui { class FenetrePrincipale; }
    QT_END_NAMESPACE
     
    class FenetrePrincipale : public QMainWindow
    {
        Q_OBJECT
     
    public:
        FenetrePrincipale(QWidget *parent = nullptr);
        ~FenetrePrincipale();
     
    private slots:
        void on_verticalSlider_valueChanged(int value);
        void startup();
     
        void on_actionQuitter_triggered();
     
        void on_listWidget_currentTextChanged(const QString &currentText);
     
    private:
        Ui::FenetrePrincipale *ui;
     
        QMediaPlayer *player;
        QAudioOutput *audioOutput;
    };
    #endif // FENETREPRINCIPALE_H
    Et mon FenetrePrincipale.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    #include "FenetrePrincipale.h"
    #include "ui_FenetrePrincipale.h"
     
    #include <QDebug>
     
    FenetrePrincipale::FenetrePrincipale(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::FenetrePrincipale)
    {
        ui->setupUi(this);
        ui->actionQuitter->setShortcut(QKeySequence::Quit);
     
        startup();
        player = new QMediaPlayer;
        audioOutput = new QAudioOutput;
        player->setAudioOutput(audioOutput);
     
    }
     
    FenetrePrincipale::~FenetrePrincipale()
    {
        delete ui;
    }
     
     
    void FenetrePrincipale::on_verticalSlider_valueChanged(int value)
    {
     
     
     
            // volumeSliderValue is in the range [0..100]
     
            qreal linearVolume = QAudio::convertVolume(value / qreal(100.0),
                                                       QAudio::LogarithmicVolumeScale,
                                                       QAudio::LinearVolumeScale);
     
        audioOutput->setVolume(qRound(linearVolume * 100));
     
    }
     
    void FenetrePrincipale::startup()
    {
        QString line;
        QFile file("../../radios.txt");
        if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        {
            QMessageBox msgBox;
            msgBox.setText("Error: file not found.");
            msgBox.exec();
     
            return;
        }
     
     
     
        QTextStream flux(&file);
        while (!flux.atEnd())
        {
            line = flux.readLine();
            ui->listWidget->addItem(line);
        }
     
     
    }
     
     
    void FenetrePrincipale::on_actionQuitter_triggered()
    {
        qApp->quit();
    }
     
     
    void FenetrePrincipale::on_listWidget_currentTextChanged(const QString &currentText)
    {
        player->setSource(currentText);
        audioOutput->setVolume(1);
        player->play();
     
    }
    et la fenetre en FenetrePrincipale.ui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>FenetrePrincipale</class>
     <widget class="QMainWindow" name="FenetrePrincipale">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>800</width>
        <height>600</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>FenetrePrincipale</string>
      </property>
      <widget class="QWidget" name="centralwidget">
       <layout class="QHBoxLayout" name="horizontalLayout">
        <item>
         <widget class="QListWidget" name="listWidget">
          <property name="font">
           <font>
            <pointsize>14</pointsize>
           </font>
          </property>
         </widget>
        </item>
        <item>
         <layout class="QVBoxLayout" name="verticalLayout">
          <item>
           <widget class="QSlider" name="verticalSlider">
            <property name="pageStep">
             <number>5</number>
            </property>
            <property name="orientation">
             <enum>Qt::Vertical</enum>
            </property>
           </widget>
          </item>
         </layout>
        </item>
       </layout>
      </widget>
      <widget class="QMenuBar" name="menubar">
       <property name="geometry">
        <rect>
         <x>0</x>
         <y>0</y>
         <width>800</width>
         <height>21</height>
        </rect>
       </property>
       <widget class="QMenu" name="menuFichier">
        <property name="title">
         <string>Fichier</string>
        </property>
        <addaction name="actionQuitter"/>
       </widget>
       <addaction name="menuFichier"/>
      </widget>
      <widget class="QStatusBar" name="statusbar"/>
      <action name="actionQuitter">
       <property name="text">
        <string>Quitter</string>
       </property>
      </action>
     </widget>
     <resources/>
     <connections/>
    </ui>
    Merci de m'avoir lu.

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par clampin Voir le message
    Mais ça le met soit a Zéro, soit a 100%.
    C'est qui ce "ça" ???

    Moi suis pas Qt C++ mais PyQt. Mais un ui reste un ui. En ouvrant ton "FenetrePrincipale.ui" dans designer, le slider bouge tout à fait normalement. Je l'arrête au milieu, au tiers ou ailleurs il reste là où je l'ai arrêté. Et si je convertis le "FenetrePrincipale.ui" dans un code Python (commande "pyuic" similaire à la "uic" de C++), le programme s'ouvre sur une fenêtre avec un slider bien accessible et fluide.

    Quelques pistes quand-même:
    • un setRange() de ton slider ne serait pas inutile (ça lui donne des bornes)
    • dans ta fonction void FenetrePrincipale::on_verticalSlider_valueChanged(int value), peut-être qu'afficher la valeur de "value" aiderait à y voir plus clair. Voire même pourquoi pas le relier à un QLCDNumber() qui permettrait d'afficher sa valeur en temps réel (un exemple ici).


    Accessoirement si ça fonctionnait en Qt5, il n'y a pas de raison que ça ne fonctionne pas en Qt6 (les changements sont mineurs entre ces deux versions).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 619
    Points : 188 594
    Points
    188 594
    Par défaut


    QAudioOutput::setVolume prend en argument un nombre à virgule flottante. Pour Qt 6, c'est un float : https://doc.qt.io/qt-6/qaudiooutput.html#volume-prop. Pour Qt 5, c'est un qreal, donc double : https://doc.qt.io/qt-5/qaudiooutput.html#setVolume.

    Je suspecte que l'erreur vient du fait que l'exemple pour QAudio::convertVolume (https://doc.qt.io/qt-5.15/qaudio.html#convertVolume) utilise QMediaPlayer et donc des entiers (https://doc.qt.io/qt-5.15/qmediaplayer.html#volume-prop).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

Discussions similaires

  1. Problème de volume avec GStreamer
    Par DPItux dans le forum Raspberry Pi
    Réponses: 0
    Dernier message: 13/02/2020, 16h05
  2. [Python 3.X] Moduler le volume sonore avec une scale.
    Par eragon014 dans le forum Tkinter
    Réponses: 4
    Dernier message: 13/12/2017, 13h14
  3. [Problème] Volume sonore déréglé
    Par vanelric dans le forum Windows 8
    Réponses: 5
    Dernier message: 31/10/2015, 20h47
  4. Problème USB => diminution du volume sonore
    Par dtcSearch dans le forum Composants
    Réponses: 4
    Dernier message: 05/11/2010, 09h22
  5. problème de capture son avec Directshow
    Par albator83 dans le forum DirectX
    Réponses: 2
    Dernier message: 06/11/2003, 17h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo