QT sound probléma

Címkék
QT sound probléma
2010-04-23T22:59:58+02:00
2010-04-24T12:21:52+02:00
2022-08-02T00:50:30+02:00
balint85
Sziasztok,

először próbáltam hangot lejátszani QT-ben, de nem sikerült. A gomb megnyomására egy olyan pitty szerű hangot ad ki, mint amikor érvénytelen gombra kattintunk.


void sounds::play() { QSound *sound = new QSound("F:/Qt/2010.02.1/Porti.mp3"); sound->play(); }

Kihagyok valamit?
Mutasd a teljes hozzászólást!
Indíts el egy QTimer szálat, ami képes bizonyos időnként lefuttatni egy slot függvényt. Itt a dokumentáció. Van benne példa is, hogyan kell csinálni.
Mutasd a teljes hozzászólást!

  • - Hülye kérdés, valami mp3-as coded-ed van fent?

    Itt egy jó példa, amit találtam:

    http://wiki.forum.nokia.com/index.php/How_To_use_QSound



    Mutasd a teljes hozzászólást!
  • Hello, már rájöttem.
    Qt csak .wav-t játszik le. Köszi.
    Hátha tudja esetleg valaki, hogy hogy lehet monitorozó függvényt csinálni? Úgy értem, hogy fut a program és egy-egy megadott időpontban mindig a megadott számot játssza le:

    void lejatszo::playmusic()
    {
    if (QTime::currentTime() == QTime(9, 13, 20))
    {
    QSound::play("F:/Qt/2010.02.1/szam2.wav");
    }
    else if (QTime::currentTime() == QTime(9, 19, 0))
    {
    QSound::play("F:/Qt/2010.02.1/szam2.wav");
    }
    else if (QTime::currentTime() == QTime(12, 30, 0))
    {
    QSound::play("F:/Qt/2010.02.1/szam3.wav");
    }
    }

    Ezt csak a program indulásakor hivja meg, azaz ha épp nincs egyezőség akkor nem játszik.
    Mutasd a teljes hozzászólást!
  • Indíts el egy QTimer szálat, ami képes bizonyos időnként lefuttatni egy slot függvényt. Itt a dokumentáció. Van benne példa is, hogyan kell csinálni.
    Mutasd a teljes hozzászólást!
  • Én is valami ilyesmire gondoltam.

    QTimer *timer = new QTimer(this); onnect(timer, SIGNAL(timeout()), this, SLOT(updater())); timer->start(1000);

    void program::updater() { ui->lineEdit4->setText(QTime::currentTime().toString()); //folyamatosan jelzi az időt if (QTime::currentTime() == QTime(11, 03, 20)) { QSound::play("F:/Qt/2010.02.1/szam1.wav"); } else if (QTime::currentTime() == QTime(11, 02, 23)) { QSound::play("F:/Qt/2010.02.1/szam2.wav"); } else if (QTime::currentTime() == QTime(11, 02, 30)) { QSound::play("F:/Qt/2010.02.1/szam3"); } }

    Miért nem működik? Próbáltam 100 msenként is meghívni.
    (ha csinálok egy else ágat, akkor értelemszerűen másodpercenként újraindítja a számot, szóval a lejátszással nincs gond). Ugyanigy működik >= esetén, azaz akkor is mpként újra indul a szám. Valahogy nem találkozik a megadott és a jelenleg idő.
    Mutasd a teljes hozzászólást!
  • Valahogy így próbáld:
    if (QTime::currentTime() >= QTime(11, 03, 20) && QTime::currentTime() <= QTime(11, 03, 21))

    Csak az egyik feltételt írtam le. Értelemszerűen a többit is át kell alakítani!

    Szerintem:
    timer->start(1000);
    Jó lesz.

    Egyébként, csináld valahogy így: (Ne kérdezd le annyiszor az aktuális időt!)
    void program::updater() { QTime ct = QTime::currentTime(); ui->lineEdit4->setText(ct.toString()); //folyamatosan jelzi az időt if (ct >= QTime(11, 03, 20) && ct <= QTime(11, 03, 21)) { QSound::play("F:/Qt/2010.02.1/szam1.wav"); } // stb... }
    Mutasd a teljes hozzászólást!
  • Köszi, működik!
    "Ne kérdezd le annyiszor az aktuális időt!)"
    Memóriaspórolás?
    Mutasd a teljes hozzászólást!
  • Nem.
    Ahogy haladsz előre a programlépésekben, telik az idő. Nem ugyanazt az aktuális időt fogod összehasonlítani az egyes feltételekben.
    Mutasd a teljes hozzászólást!
Címkék
abcd