traverso-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Traverso-commit] traverso/src core/AudioFileMerger.cpp core/Audi...


From: Remon Sijrier
Subject: [Traverso-commit] traverso/src core/AudioFileMerger.cpp core/Audi...
Date: Fri, 23 Nov 2007 21:19:18 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Remon Sijrier <r_sijrier>       07/11/23 21:19:18

Modified files:
        src/core       : AudioFileMerger.cpp AudioFileMerger.h 
                         ProjectConverter.cpp ProjectConverter.h 
                         WriteSource.h 
        src/traverso/dialogs: ProjectConverterDialog.cpp 
                              ProjectConverterDialog.h 

Log message:
        * Updated the Project converter, seems to work fine now

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/AudioFileMerger.cpp?cvsroot=traverso&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/AudioFileMerger.h?cvsroot=traverso&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ProjectConverter.cpp?cvsroot=traverso&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ProjectConverter.h?cvsroot=traverso&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/WriteSource.h?cvsroot=traverso&r1=1.21&r2=1.22
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/dialogs/ProjectConverterDialog.cpp?cvsroot=traverso&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/dialogs/ProjectConverterDialog.h?cvsroot=traverso&r1=1.1&r2=1.2

Patches:
Index: core/AudioFileMerger.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/AudioFileMerger.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- core/AudioFileMerger.cpp    5 Nov 2007 15:49:29 -0000       1.4
+++ core/AudioFileMerger.cpp    23 Nov 2007 21:19:17 -0000      1.5
@@ -27,10 +27,12 @@
 #include "AbstractAudioReader.h"
 #include "ReadSource.h"
 #include "WriteSource.h"
+#include "Peak.h"
 #include "defines.h"
 
 AudioFileMerger::AudioFileMerger()
 {
+       m_stopMerging = false;
        moveToThread(this);
        start();
        connect(this, SIGNAL(dequeueTask()), this, SLOT(dequeue_tasks()), 
Qt::QueuedConnection);
@@ -65,8 +67,6 @@
 
 void AudioFileMerger::process_task(MergeTask task)
 {
-       printf("Entering process_task\n");
-       printf("task readsource rate: %d\n", task.readsource0->get_rate());
        QString name = task.readsource0->get_name();
        int length = name.length();
        emit taskStarted(name.left(length-28));
@@ -98,10 +98,18 @@
                delete spec;
                return;
        }
+       // Enable on the fly generation of peak data to speedup conversion 
+       // (no need to re-read all the audio files to generate peaks)
        writesource->set_process_peaks(true);
        
        int oldprogress = 0;
        do {
+               // if the user asked to stop processing, jump out of this 
+               // loop, and cleanup any resources in use.
+               if (m_stopMerging) {
+                       goto out;
+               }
+                       
                nframes_t diff = (spec->endLocation - 
spec->pos).to_frame(task.readsource0->get_rate());
                nframes_t this_nframes = std::min(diff, buffersize);
                nframes_t nframes = this_nframes;
@@ -116,6 +124,13 @@
                        spec->dataF[1+(x*spec->channels)] = 
decodebuffer1.destination[0][x];
                }
                
+               // due the fact peak generating does _not_ happen in 
writesource->process
+               // but in a function used by DiskIO, we have to hack the peak 
processing 
+               // in here.
+               writesource->get_peak()->process(0, 
decodebuffer0.destination[0], nframes);
+               writesource->get_peak()->process(1, 
decodebuffer1.destination[0], nframes);
+               
+               // Process the data, and write to disk
                writesource->process(buffersize);
                
                spec->pos.add_frames(nframes, task.readsource0->get_rate());
@@ -128,11 +143,27 @@
                        
        } while (spec->pos != spec->totalTime);
                
+       
+       out:
        writesource->finish_export();
        delete writesource;
        delete [] spec->dataF;
        delete spec;
        
        emit taskFinished(name.left(length-28));
+       
+       //  The user asked to stop processing, exit the event loop
+       // and signal we're done.
+       if (m_stopMerging) {
+               exit(0);
+               wait(1000);
+               m_tasks.clear();
+               emit processingStopped();
+       }
+}
+
+void AudioFileMerger::stop_merging()
+{
+       m_stopMerging = true;
 }
 

Index: core/AudioFileMerger.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/AudioFileMerger.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- core/AudioFileMerger.h      10 Oct 2007 16:49:45 -0000      1.1
+++ core/AudioFileMerger.h      23 Nov 2007 21:19:18 -0000      1.2
@@ -38,6 +38,7 @@
        }
        
        void enqueue_task(ReadSource* source0, ReadSource* source2, const 
QString& dir, const QString& outfilename);
+       void stop_merging();
 
                
 private slots:
@@ -53,6 +54,7 @@
        
        QQueue<MergeTask> m_tasks;
        QMutex m_mutex;
+       bool m_stopMerging;
        
        void process_task(MergeTask task);
        
@@ -61,6 +63,7 @@
        void progress(int);
        void taskStarted(QString);
        void taskFinished(QString);
+       void processingStopped();
 };
 
 #endif

Index: core/ProjectConverter.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/ProjectConverter.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- core/ProjectConverter.cpp   29 Oct 2007 09:00:10 -0000      1.4
+++ core/ProjectConverter.cpp   23 Nov 2007 21:19:18 -0000      1.5
@@ -34,6 +34,7 @@
 ProjectConverter::ProjectConverter() 
 {
        m_projectfileversion = -1;
+       m_merger = 0;
        connect(this, SIGNAL(conversionFinished()), this, 
SLOT(conversion_finished()));
 }
 
@@ -56,6 +57,17 @@
 
 void ProjectConverter::set_project(const QString & rootdir, const QString & 
name)
 {
+       m_readsources.clear();
+       m_filesToMerge = 0;
+       m_filesMerged = 0;
+       if (m_merger) {
+               delete m_merger;
+       }
+       m_document.clear();
+       
+       
+       m_projectfileversion = -1;
+       
        m_rootdir = rootdir;
        m_projectname = name;
 
@@ -95,6 +107,7 @@
        connect(m_merger, SIGNAL(progress(int)), this, SIGNAL(progress(int)));
        connect(m_merger, SIGNAL(taskStarted(QString)), this, 
SLOT(file_merge_started(QString)));
        connect(m_merger, SIGNAL(taskFinished(QString)), this, 
SLOT(file_merge_finished(QString)));
+       connect(m_merger, SIGNAL(processingStopped()), this, 
SLOT(processing_stopped()));
        
        QDomElement docElem = m_document.documentElement();
        QDomNode propertiesNode = docElem.firstChildElement("Properties");
@@ -117,6 +130,7 @@
                qint64 id = readsourceelement.attribute("id", "").toLongLong();
                QString dir = readsourceelement.attribute("dir", "" );
                QString name = readsourceelement.attribute("name", "No name 
supplied?" );
+               bool wasrecording = readsourceelement.attribute("wasrecording", 
0).toInt();
 
                if (filecount == 2 && channelcount == 2 && dir == (m_rootdir + 
"/audiosources/")) {
                        ReadSource* readsource0 = new ReadSource(dir, name + 
"-ch0.wav");
@@ -136,6 +150,14 @@
                        readsourceelement.setAttribute("length", 
readsource0->get_length().universal_frame());
                        readsourceelement.setAttribute("rate", 
readsource0->get_rate());
                        
+               } else {
+                       // The version 2 of the project file didn't have the 
full name
+                       // including the channel number, it was added by 
ReadSource so 
+                       // we have to do it now since newer version of 
ReadSource no longer add
+                       // the channel number + extension to the readsource 
name.
+                       if (!name.contains(".wav") && wasrecording && 
channelcount == 1) {
+                               readsourceelement.setAttribute("name", name + 
"-ch0.wav");
+                       }
                }
                        
                        
@@ -269,3 +291,15 @@
        emit conversionFinished();
 }
 
+void ProjectConverter::stop_conversion()
+{
+       if (m_merger && m_merger->isRunning()) {
+               m_merger->stop_merging();
+       }
+}
+
+void ProjectConverter::processing_stopped()
+{
+       emit message(tr("Conversion stopped on user request, you can continue 
to use this Project with Traverso <= 0.41.0, or reopen it with this version of 
Traverso and start the conversion again"));
+}
+

Index: core/ProjectConverter.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/ProjectConverter.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- core/ProjectConverter.h     10 Oct 2007 16:49:45 -0000      1.1
+++ core/ProjectConverter.h     23 Nov 2007 21:19:18 -0000      1.2
@@ -39,6 +39,7 @@
        
        void set_project(const QString& rootdir, const QString& name);
        int start();
+       void stop_conversion();
        QString get_conversion_description();
 
 private:
@@ -59,6 +60,7 @@
        void file_merge_started(QString file);
        void file_merge_finished(QString file);
        void finish_2_3_conversion();
+       void processing_stopped();
 
 signals:
        void progress(int);

Index: core/WriteSource.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/WriteSource.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- core/WriteSource.h  12 Oct 2007 19:38:51 -0000      1.21
+++ core/WriteSource.h  23 Nov 2007 21:19:18 -0000      1.22
@@ -47,6 +47,7 @@
        int get_processable_buffer_space() const;
        int get_chunck_size() const {return m_chunkSize;}
        int get_buffer_size() const {return m_bufferSize;}
+       Peak* get_peak() {return m_peak;}
 
        int process(nframes_t nframes);
        

Index: traverso/dialogs/ProjectConverterDialog.cpp
===================================================================
RCS file: 
/sources/traverso/traverso/src/traverso/dialogs/ProjectConverterDialog.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- traverso/dialogs/ProjectConverterDialog.cpp 10 Oct 2007 16:49:45 -0000      
1.1
+++ traverso/dialogs/ProjectConverterDialog.cpp 23 Nov 2007 21:19:18 -0000      
1.2
@@ -93,3 +93,10 @@
        reject();
 }
 
+void ProjectConverterDialog::on_stopConversionButton_clicked()
+{
+       m_converter->stop_conversion();
+       stopConversionButton->hide();
+       closeButton->show();
+}
+

Index: traverso/dialogs/ProjectConverterDialog.h
===================================================================
RCS file: 
/sources/traverso/traverso/src/traverso/dialogs/ProjectConverterDialog.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- traverso/dialogs/ProjectConverterDialog.h   10 Oct 2007 16:49:45 -0000      
1.1
+++ traverso/dialogs/ProjectConverterDialog.h   23 Nov 2007 21:19:18 -0000      
1.2
@@ -51,6 +51,7 @@
        void converter_messages(QString);
        void conversion_finished();
        void on_loadProjectButton_clicked();
+       void on_stopConversionButton_clicked();
 };
 
 #endif




reply via email to

[Prev in Thread] Current Thread [Next in Thread]