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

Qt Discussion :

QAudioOutput::setVolume : un bogue ?


Sujet :

Qt

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Points : 65
    Points
    65
    Par défaut QAudioOutput::setVolume : un bogue ?
    Bonjour à tous !
    J'aurai besoin d'une info, savoir si je suis le seul ou pas...
    setVolume de QAudioOutput requiet un volume compris entre 0 et 1 (un qreal).

    Jusque là, ça va.
    J'ai créé un slider qui fait un setVolume sur mon QAudioOutput après l'avoir divisé par 100.
    Un qDebug() me permet de voir que les valeurs sont bonnes.

    Mon problème vient du fait qu'une fois que j'ai dépassé la valeur 0.5, plus aucune modification ne s'opère.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void MainWindow::on_volumeSlider_valueChanged(int value)
        {
            qreal newVolume = (qreal)value/100;
            qDebug() << QString::number(value) + "->" + QString::number(newVolume);
            ... //Je défini ma valeur...
        }
    Je suis sur QT5 et win7 64.
    J'ai donc accès au mélangeur et j'ai la vision sur les volumes des programmes de façon indépendante.
    Je peux donc voir le slider de windows bouger en même temps que mon slider dans mon programme.

    Et bien même souci, on voit que le curseur ne dépasse pas la moitié parfaite.

    Pour résumer, mon QAudioOutput::setVolume semble ne plus changer le volume au delà de 0.5.

    J'apprécierai grandement vos lumières sur ce souci qui me bride depuis maintenant 2 jours !

    Merci d'avance !

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Je vous conseille d'observer le mixeur des volumes pour voir commert le système réagit.
    Sinon, j'ai pensé à une échelle logarithmique, mais la documentaiton ne l'indique pas.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Points : 65
    Points
    65
    Par défaut
    Bonjour,
    comme je l'ai indiqué dans mon post, le curseur du mixeur windows me montre le même constat : il s'arrête à la moitié parfaite, là ou mon curseur continue au dela des 50%.

    Pour le log, j'y avais pensé aussi, mais ce n'est pas une sensation auditive, c'est un vrai constat visuel.
    De toutes façons, j'utilise un algo exponentiel.
    C'est juste que j'attends de corriger ce problème avant de le mettre en place.

    ps : J'ai testé la demo d'exemple que QAudioOutput, il y a aussi une barre de volume.
    Et bien j'ai le même souci !

    Quelqu'un d'autre peut il essayer ?
    Et surtout, regarder si visuellement le curseur du mixeur windows dépasse les 50% ?
    Merci.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Points : 65
    Points
    65
    Par défaut
    Personne pour essayer ? ^^
    PS, après investigation, il semblerai que ce soit un bug de waveOutSetVolume de Qt sur win7.

    Une idée pour palier à ça ?

  5. #5
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Je vais bien de 0 à 100%, tu dois avoir un limiteur de volume au niveau de tes pilotes, quelque chose du genre.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par Troudhyl Voir le message
    Je vais bien de 0 à 100%, tu dois avoir un limiteur de volume au niveau de tes pilotes, quelque chose du genre.
    Ah on se croise !
    Quelque chose me dit que tu es sur xp ^^.
    Ps : mon edit du dessus ^^.

    Sinon, je n'ai aucun souci avec d'autres applications telles que Foobar2000 ou tout va bien.
    Je sais que mes périphériques ne brident rien.
    Qt utilise "waveOutSetVolume".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void QAudioOutputPrivate::setVolume(qreal v)
    {
        const qreal normalizedVolume = qBound(qreal(0.0), v, qreal(1.0));
        if (deviceState != QAudio::ActiveState) {
            volumeCache = normalizedVolume;
            return;
        }
        const qint16 scaled = normalizedVolume * 0xFFFF;
        DWORD vol = MAKELONG(scaled, scaled);
        MMRESULT res = waveOutSetVolume(hWaveOut, vol);
        if (res == MMSYSERR_NOERROR)
            volumeCache = normalizedVolume;
    }
    Quelque chose semble l'empêcher de stocker volumeCache correctement sur certaines config.
    Je suis sur Win7x64.

  7. #7
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Citation Envoyé par devoluti0n Voir le message
    Je suis sur Win7x64.
    Désolé de ne pouvoir t'aider plus, mais je suis sous Win7x64 aussi

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Points : 65
    Points
    65
    Par défaut
    Hmm, c'est le moment ou je pleure, c'est ça ?
    Haha !

    Je vais tenter d'expliquer un peu mon programme et mon code (version simplifiée !).

    J'utilise un QTreeWidget qui pour chaque item possède un QVariant qui me permet de récupérer une instance de ma classe "Sample" lié à cet item.

    Pour chaque instance de ma classe "Sample*", j'ai un QAudioOutput instancié qu'il lui est liée : Ça me permet de déclencher des sons différents en parallèle (1 par item).

    Les sons proviennent de waves / mp3 et ogg dont je créer le QFormat pour la lecture en parsant le header après avoir converti les fichiers si nécessaire.

    Ce que je met dans mon QAudioOutput::Start() est un buffer de type QBuffer que j'ouvre et Write avec les données de mon wave stockée dans un QByteArray (à peu prêt ^^)

    Aucun souci à ce niveau là.
    Je peux sélectionner une sortie générale pour tous mes sons via :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach(QAudioDeviceInfo deviceInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioOutput))
    et j'ajoute dans mon combo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ui->AudioOutputCombo->addItem(deviceInfo.deviceName(), qVariantFromValue(deviceInfo));
    Ensuite via un slot sur mon combo, lorsque je change de sortie, je parcoure tous mes QTreeWidgetItem et récupère l'instance de la classe "Sample*" qui lui est liée.

    Ensuite je récupère le QAudioOuput qui va avec.
    J'appèle stop();
    j'appelle disconnect(this);
    J'appelle une méthode de ma classe "Sample" qui me permet de redéfinir une nouvelle sortie, et je creer une nouvelle instance de QAudioOutput après avoir delete l'ancienne.

    Tout ça fonctionne à merveille.

    Même logique pour le setVolume();
    j'ai un curseur général QSlider.
    Je parcours tous mes items, je fais un setVolume(x) sur chacun.
    Avec un volume(), je constate que les modifs sont valides.

    Voilà pour le topo.


    Mais au delà de 50%, le curseur de windows revient immédiatement sur 50%.
    Ex : j'ouvre mon programme. je creer un item avec un son lié etc... bref, à la lecture il est à 50% malgré mon QSlider à 100%. Je monte le Slider Window à 100%. J'érafle mon slider qui était à 100, je le met à 99, ET HOP, celui de windows repasse à 50.


    Haha ! Pas mal hein ! Pour mon 1er programme en c++, j'men suis sorti pour tout, sauf pour ça ... Bleh ...

    PS : je n'ai de soucis qu'avec mon programme !! Évidemment :p.

  9. #9
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Si tu dis que tu as le même souci avec la démo d'exemple que tout le monde peut essayer, ça veut dire que ce n'est pas lié à ton programme de toute façon.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Points : 65
    Points
    65
    Par défaut
    Hmmm, pour la curiosité, tu es sous quelle version de Qt ? 5.0.2 32bits ?

  11. #11
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    5.0.2 msvc2010 32bits oui.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Points : 65
    Points
    65
    Par défaut
    Ok, impeccable merci .
    Je vais enquêter encore un peu ^^, parceque ça vient forcément de Qt.

Discussions similaires

  1. Drole de bogue avec Delphi?
    Par Jayceblaster dans le forum Delphi
    Réponses: 8
    Dernier message: 24/08/2006, 14h23
  2. De l'aide SVP un petit bogue de script une reconnaissance confuse
    Par richard77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/05/2006, 14h03
  3. [PhpPgAdmin] c'est lui qui bogue ou c'est moi ?
    Par Chauve souris dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 28/11/2005, 16h30
  4. Réponses: 4
    Dernier message: 18/04/2005, 09h06
  5. [regex][string] replaceAll bogué ?
    Par 7eme dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 13/11/2003, 16h36

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