[gelöst] Abschnitt einer Audiodatei abspielen

Alles rund um die Programmierung mit Qt
Antworten
thebigear
Beiträge: 17
Registriert: 29. März 2010 15:36

[gelöst] Abschnitt einer Audiodatei abspielen

Beitrag 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
Zuletzt geändert von thebigear am 17. April 2010 11:01, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
thebigear
Beiträge: 17
Registriert: 29. März 2010 15:36

Beitrag 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);
    }
 }
Antworten