Seite 1 von 1

[gelöst] Abschnitt einer Audiodatei abspielen

Verfasst: 16. April 2010 17:24
von thebigear
Hallo,

ich möchte gerne eine komplette Audiodatei laden, die sich der Nutzer anhören kann. Der Nutzer soll weiterhin die Möglichkeit haben einen Abschnitt der Audiodatei als Loop abzuspielen.

Habe schon die QT4 Doku durchsucht, aber nichts gefunden, womit dies einfach zu bewerkstelligen wäre. Das Setzen der Anfangs- und Endzeiten des Loops habe ich schon programmiert. Mir fehlt nur noch der Loop.

Hat irgendwer eine Idee, wie man das mit QT Bordmitteln umsetzen kann?

Vielen Dank

Ingo Siegert

Verfasst: 16. April 2010 18:50
von franzf
Als ungefähre Richtung:
*) MediaObject::seek() um die Position zu setzen
*) Auf das tick()-SIGNAL des Mediaobjects in SLOT (z.B. on_tick()) reagieren.
*) Im SLOT on_tick() dann schauen ob dein Abschnitt zu Ende ist, und dann stop()-pen, oder eben wieder mit seek() die Position auf Anfang setzen.

Verfasst: 17. April 2010 11:01
von thebigear
Danke, das war die Lösung.

Beim drücken des Loop-Butons wird jetzt der neue Zeitpunkt gesetzt, mittels seek und ich überwache in der tick-funktion, ob die Datei über das Ende des Loops hinausgeht und springe dann wieder an den Anfang. Hier noch der Code:

Code: Alles auswählen

void Glob_Wgt_Audioplayer::slotSetLoop(bool value){
    loop = value;
    //when loop enabled, seek to start position of sentence:
    if(loop){
        //Change State to Pause to seek:
        mediaObject->pause();
        mediaObject->seek(startLoop);
        //Change State to Play, to start Playing
        mediaObject->play();
    }
}

void Glob_Wgt_Audioplayer::slotTick(qint64 time){
    QTime displayTime((time / 3600000) % 60, (time / 60000) % 60, (time / 1000) % 60);
    actTime = QTime::QTime((time / 3600000) % 60, (time / 60000) % 60, (time / 1000) % 60, (time % 1000));
    actTimeInt64 = time;
    m_ui->LCD_actTime->display(displayTime.toString("mm:ss"));
    if(loop && time > endLoop){
        mediaObject->seek(startLoop);
    }
 }