[Top][All Lists]
[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;
- [Traverso-commit] traverso/src audiofileio/encode/AbstractAudioWr...,
Ben Levitt <=