traverso-commit
[Top][All Lists]
Advanced

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

[Traverso-commit] traverso/src audiofileio/encode/AbstractAudioWr...


From: Ben Levitt
Subject: [Traverso-commit] traverso/src audiofileio/encode/AbstractAudioWr...
Date: Fri, 03 Aug 2007 23:05:04 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Ben Levitt <benjie>     07/08/03 23:05:04

Modified files:
        src/audiofileio/encode: AbstractAudioWriter.cpp 
                                AbstractAudioWriter.h SFAudioWriter.cpp 
                                SFAudioWriter.h 
        src/core       : AudioClip.cpp Export.cpp Export.h 
                         WriteSource.cpp WriteSource.h 
        src/commands   : AudioClipExternalProcessing.cpp 

Log message:
        - Remove libsndfile from the rest of the code.
        - Improve generalization of AudioWriters.
        - When Export finishes, close ExportWidget.  (After Export, I kept 
hitting
          return or clicking okay and accidentally starting the export again.)

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/encode/AbstractAudioWriter.cpp?cvsroot=traverso&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/encode/AbstractAudioWriter.h?cvsroot=traverso&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/encode/SFAudioWriter.cpp?cvsroot=traverso&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/encode/SFAudioWriter.h?cvsroot=traverso&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/AudioClip.cpp?cvsroot=traverso&r1=1.116&r2=1.117
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Export.cpp?cvsroot=traverso&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Export.h?cvsroot=traverso&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/WriteSource.cpp?cvsroot=traverso&r1=1.25&r2=1.26
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/WriteSource.h?cvsroot=traverso&r1=1.15&r2=1.16
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/AudioClipExternalProcessing.cpp?cvsroot=traverso&r1=1.21&r2=1.22

Patches:
Index: audiofileio/encode/AbstractAudioWriter.cpp
===================================================================
RCS file: 
/sources/traverso/traverso/src/audiofileio/encode/AbstractAudioWriter.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- audiofileio/encode/AbstractAudioWriter.cpp  3 Aug 2007 02:39:35 -0000       
1.1
+++ audiofileio/encode/AbstractAudioWriter.cpp  3 Aug 2007 23:05:03 -0000       
1.2
@@ -30,10 +30,9 @@
 #include "Debugger.h"
 
 
-AbstractAudioWriter::AbstractAudioWriter(const QString& filename)
+AbstractAudioWriter::AbstractAudioWriter()
  : QObject(0)
 {
-       m_fileName = filename;
        m_channels = 0;
        m_rate = 0;
        m_sampleWidth = 0;
@@ -72,11 +71,14 @@
 }
 
 
-bool AbstractAudioWriter::open()
+bool AbstractAudioWriter::open(const QString& filename)
 {
+       if (m_isOpen) {
        close();
+       }
        
        m_writePos = 0;
+       m_fileName = filename;
        
        m_isOpen = open_private();
        
@@ -107,3 +109,26 @@
        
        return 0;
 }
+
+
+// Static method used by other classes to get an AudioWriter for the correct 
file type
+AbstractAudioWriter* AbstractAudioWriter::create_audio_writer(const QString& 
type)
+{
+       if (type == "sf") {
+               return new SFAudioWriter();
+       }
+       /*else if (type == "wp") {
+               return new WPAudioWriter();
+       }
+       else if (type == "mad") {
+               return new MadAudioWriter();
+       }
+       else if (type == "flac") {
+               return new FlacAudioWriter();
+       }
+       else if (type == "vorbis") {
+               return new VorbisAudioWriter();
+       }*/
+
+       return 0;
+}

Index: audiofileio/encode/AbstractAudioWriter.h
===================================================================
RCS file: 
/sources/traverso/traverso/src/audiofileio/encode/AbstractAudioWriter.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- audiofileio/encode/AbstractAudioWriter.h    3 Aug 2007 02:39:35 -0000       
1.1
+++ audiofileio/encode/AbstractAudioWriter.h    3 Aug 2007 23:05:03 -0000       
1.2
@@ -33,18 +33,21 @@
        Q_OBJECT
        
 public:
-       AbstractAudioWriter(const QString& filename);
+       AbstractAudioWriter();
        ~AbstractAudioWriter();
        
        void set_num_channels(int channels);
        void set_bits_per_sample(int bits);
        void set_rate(int rate);
+       virtual bool set_format_attribute(const QString& key, const QString& 
value) { return false; }
        nframes_t pos();
        
-       bool open();
+       bool open(const QString& filename);
        nframes_t write(void* buffer, nframes_t frameCount);
        void close();
        
+       static AbstractAudioWriter* create_audio_writer(const QString& type);
+       
 protected:
        virtual bool is_valid_format() = 0;
        virtual bool open_private() = 0;

Index: audiofileio/encode/SFAudioWriter.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/audiofileio/encode/SFAudioWriter.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- audiofileio/encode/SFAudioWriter.cpp        3 Aug 2007 02:39:35 -0000       
1.1
+++ audiofileio/encode/SFAudioWriter.cpp        3 Aug 2007 23:05:03 -0000       
1.2
@@ -28,8 +28,8 @@
 #include "Debugger.h"
 
 
-SFAudioWriter::SFAudioWriter(const QString& filename)
- : AbstractAudioWriter(filename)
+SFAudioWriter::SFAudioWriter()
+ : AbstractAudioWriter()
 {
        m_sf = 0;
 }
@@ -46,7 +46,7 @@
 bool SFAudioWriter::is_valid_format()
 {
        memset (&m_sfinfo, 0, sizeof(m_sfinfo));
-       m_sfinfo.format = m_format;
+       m_sfinfo.format = get_sf_format();
        m_sfinfo.samplerate = m_rate;
        m_sfinfo.channels = m_channels;
        //m_sfinfo.frames = m_spec->end_frame - m_spec->start_frame + 1;
@@ -55,9 +55,24 @@
 }
 
 
-void SFAudioWriter::set_format(int format)
+bool SFAudioWriter::set_format_attribute(const QString& key, const QString& 
value)
 {
-       m_format = format;
+       if (key == "filetype") {
+               if (value == "wav") {
+                       m_fileType = SF_FORMAT_WAV;
+                       return true;
+               }
+               else if (value == "aiff") {
+                       m_fileType = SF_FORMAT_AIFF;
+                       return true;
+               }
+               else if (value == "flac") {
+                       m_fileType = SF_FORMAT_FLAC;
+                       return true;
+               }
+       }
+       
+       return false;
 }
 
 
@@ -66,7 +81,7 @@
        char errbuf[256];
        
        memset (&m_sfinfo, 0, sizeof(m_sfinfo));
-       m_sfinfo.format = m_format;
+       m_sfinfo.format = get_sf_format();
        m_sfinfo.frames = 48000*100;
        m_sfinfo.samplerate = m_rate;
        m_sfinfo.channels = m_channels;
@@ -124,3 +139,30 @@
        }
        m_sf = 0;
 }
+
+
+int SFAudioWriter::get_sf_format()
+{
+       int sfBitDepth;
+       
+       switch (m_sampleWidth) {
+               case 8:
+                       sfBitDepth = SF_FORMAT_PCM_S8;
+                       break;
+               case 16:
+                       sfBitDepth = SF_FORMAT_PCM_16;
+                       break;
+               case 24:
+                       sfBitDepth = SF_FORMAT_PCM_24;
+                       break;
+               case 32:
+                       sfBitDepth = SF_FORMAT_PCM_32;
+                       break;
+               default:
+                       sfBitDepth = SF_FORMAT_FLOAT;
+                       break;
+       }
+       
+       return (sfBitDepth | m_fileType);
+}
+

Index: audiofileio/encode/SFAudioWriter.h
===================================================================
RCS file: /sources/traverso/traverso/src/audiofileio/encode/SFAudioWriter.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- audiofileio/encode/SFAudioWriter.h  3 Aug 2007 02:39:35 -0000       1.1
+++ audiofileio/encode/SFAudioWriter.h  3 Aug 2007 23:05:03 -0000       1.2
@@ -34,18 +34,19 @@
        Q_OBJECT
        
 public:
-       SFAudioWriter(const QString& filename);
+       SFAudioWriter();
        ~SFAudioWriter();
        
        bool is_valid_format();
-       void set_format(int format);
+       bool set_format_attribute(const QString& key, const QString& value);
        
 protected:
        bool open_private();
        nframes_t write_private(void* buffer, nframes_t frameCount);
        void close_private();
+       int get_sf_format();
        
-       int             m_format;       
+       int             m_fileType;     
        SNDFILE*        m_sf;
        SF_INFO         m_sfinfo;
 };

Index: core/AudioClip.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/AudioClip.cpp,v
retrieving revision 1.116
retrieving revision 1.117
diff -u -b -r1.116 -r1.117
--- core/AudioClip.cpp  2 Aug 2007 22:01:36 -0000       1.116
+++ core/AudioClip.cpp  3 Aug 2007 23:05:03 -0000       1.117
@@ -557,9 +557,9 @@
                ExportSpecification* spec = new ExportSpecification;
 
                spec->exportdir = pm().get_project()->get_root_dir() + 
"/audiosources/";
-               spec->format = SF_FORMAT_WAV;
+               spec->writerType = "sf";
+               spec->extraFormat["filetype"] = "wav";
                spec->data_width = 1;   // 1 means float
-               spec->format |= SF_FORMAT_FLOAT;
                spec->channels = 1;
                spec->sample_rate = audiodevice().get_sample_rate();
                spec->src_quality = SRC_SINC_MEDIUM_QUALITY;

Index: core/Export.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/Export.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- core/Export.cpp     25 May 2007 23:37:24 -0000      1.8
+++ core/Export.cpp     3 Aug 2007 23:05:03 -0000       1.9
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  
-    $Id: Export.cpp,v 1.8 2007/05/25 23:37:24 benjie Exp $
+    $Id: Export.cpp,v 1.9 2007/08/03 23:05:03 benjie Exp $
 */
 
 #include "Export.h"
@@ -54,7 +54,6 @@
        data_width = -1;
        
        total_frames = -1;
-       format = SF_FORMAT_FLOAT;
        pos = -1;
        extension = "";
        

Index: core/Export.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/Export.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- core/Export.h       25 May 2007 23:37:24 -0000      1.11
+++ core/Export.h       3 Aug 2007 23:05:03 -0000       1.12
@@ -17,7 +17,7 @@
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 
-$Id: Export.h,v 1.11 2007/05/25 23:37:24 benjie Exp $
+$Id: Export.h,v 1.12 2007/08/03 23:05:03 benjie Exp $
 */
 
 #ifndef EXPORT_H
@@ -25,8 +25,8 @@
 
 #include <QThread>
 #include <QString>
+#include <QMap>
 
-#include <sndfile.h>
 #include <samplerate.h>
 
 #include "defines.h"
@@ -55,12 +55,13 @@
 
        /* used exclusively during export */
 
+       QString         writerType;
        float*          dataF;
        int             blocksize;
        int             data_width;
 
        long            total_frames;
-       int             format;
+       QMap<QString, QString>  extraFormat;
        long            pos;
        QString         extension;
 

Index: core/WriteSource.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/WriteSource.cpp,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -b -r1.25 -r1.26
--- core/WriteSource.cpp        3 Aug 2007 02:39:35 -0000       1.25
+++ core/WriteSource.cpp        3 Aug 2007 23:05:03 -0000       1.26
@@ -272,22 +272,19 @@
                delete m_writer;
        }
        
-       if (1) {
-               SFAudioWriter* sfWriter = new SFAudioWriter(name);
-               sfWriter->set_format(m_spec->format); // FIXME: keep SF_FORMAT 
within SFAudioWriter
-               m_writer = sfWriter;
-       }
-       else {
-               //WPAudioWriter* wpWriter = new WPAudioWriter(m_fileName);
-               //m_writer = wpWriter;
-       }
+       m_writer = AbstractAudioWriter::create_audio_writer(m_spec->writerType);
        m_writer->set_rate(m_spec->sample_rate);
        m_writer->set_bits_per_sample(m_spec->data_width);
        m_writer->set_num_channels(m_spec->channels);
        
+       QString key;
+       foreach (key, m_spec->extraFormat.keys()) {
+               m_writer->set_format_attribute(key, m_spec->extraFormat[key]);
+       }
+       
        /* XXX make sure we have enough disk space for the output */
 
-       if (m_writer->open() == false) {
+       if (m_writer->open(name) == false) {
                return -1;
        }
        

Index: core/WriteSource.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/WriteSource.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- core/WriteSource.h  3 Aug 2007 02:39:35 -0000       1.15
+++ core/WriteSource.h  3 Aug 2007 23:05:03 -0000       1.16
@@ -24,7 +24,6 @@
 
 #include "AudioSource.h"
 #include "RingBufferNPT.h"
-#include <sndfile.h>
 #include "gdither.h"
 #include <samplerate.h>
 

Index: commands/AudioClipExternalProcessing.cpp
===================================================================
RCS file: 
/sources/traverso/traverso/src/commands/AudioClipExternalProcessing.cpp,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- commands/AudioClipExternalProcessing.cpp    18 Jul 2007 13:13:05 -0000      
1.21
+++ commands/AudioClipExternalProcessing.cpp    3 Aug 2007 23:05:03 -0000       
1.22
@@ -66,9 +66,9 @@
                spec->extension = "wav";
        
                spec->exportdir = pm().get_project()->get_root_dir() + 
"/audiosources/";
-               spec->format = SF_FORMAT_WAV;
+               spec->writerType = "sf";
+               spec->extraFormat["filetype"] = "wav";
                spec->data_width = 16;
-               spec->format |= SF_FORMAT_PCM_16;
                spec->channels = 2;
                spec->sample_rate = m_readsource->get_rate();
                spec->blocksize = buffersize;




reply via email to

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