Auslesen Audiolänge im Thread auslagern

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

Auslesen Audiolänge im Thread auslagern

Beitrag von thebigear »

Hallo,

ich hatte gestern das Problem, dass ich gerne doe Zeiten von einer Liste von Audiodateien anzeigen wollte. Dies habe ich in diesem Link http://qtforum.de/forum/viewtopic.php?t=12591 gelöst.

Nun ist aber das Problem, das diese Lösung nun die GUI blockert und ich das deshalb gerne in einen Thread auslagern will.

Hier nun meine Idee dazu:

Ich würde gerne dem Thread eine QStringList mit den Audiodateinamen übergeben und eine QListe mit den Endzeiten zurückbekommen.
Dazu würde ich gerne weiterhin meine jetzige Struktur komplett in einen QThread auslagern.
Geht das überhaupt, und was muss ich dabei beachten.

Hier meine jetzigen Funktionen:

Code: Alles auswählen

void main::slotOpenMultiAudio(){
    if (configValues.isFileLoadedSuccessfully()) {
        do{
        AudiofileNameList = QFileDialog::getOpenFileNames(this, tr("Open Audio File"),XmlFilePath,tr("Audio Files (*.wav *.mp3)"));
        }while(AudiofileNameList.isEmpty());
        
       foreach (QString string, AudiofileNameList) {
            Phonon::MediaSource source(string);
            sources.append(source);
            QTime nullTime;
            nullTime.setHMS(0,0,0,0);
            endtimeSplittFiles.append(nullTime);
        }
        if (!sources.isEmpty()){
                metaInformationResolver->setCurrentSource(sources.at(0));
        }
}

Code: Alles auswählen

void main::metaStateChanged(Phonon::State newState, Phonon::State oldState){
    //get index of actual audio-file, when StoppenState is entered (a.k.a. ready to play):
    if(newState == Phonon::StoppedState){
        int index = sources.indexOf(metaInformationResolver->currentSource()) +1;
        //get end time of actual audiotime:
        qint64 time64 = metaInformationResolver->totalTime();
        endtimeSplittFiles[index-1] = QTime::QTime((time64 / 3600000) % 60, (time64 / 60000) % 60, (time64 / 1000) % 60, (time64 % 1000));
        if (index < sources.size()) {
            metaInformationResolver->setCurrentSource(sources.at(index));
        }

        /// test, if Endtime-Array is filled!
        QTime nullTime;
        nullTime.setHMS(0,0,0,0);
        if(!endtimeSplittFiles.contains(nullTime)){
            qDebug() << "alles gefüllt";
            qDebug() << endtimeSplittFiles;
            emit(endtimeReady(endtimeSplittFiles));
        }
    }
}
Der Code ist noch nicht ganz sauber, soll mir erstmal beim verständnis helfen.
Antworten