[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Traverso-commit] traverso/src/core AbstractAudioReader.cpp Abstr...
From: |
Ben Levitt |
Subject: |
[Traverso-commit] traverso/src/core AbstractAudioReader.cpp Abstr... |
Date: |
Tue, 24 Jul 2007 17:57:06 +0000 |
CVSROOT: /sources/traverso
Module name: traverso
Changes by: Ben Levitt <benjie> 07/07/24 17:57:06
Modified files:
src/core : AbstractAudioReader.cpp AbstractAudioReader.h
FlacAudioReader.cpp FlacAudioReader.h
MadAudioReader.cpp MadAudioReader.h
ReadSource.cpp ReadSource.h
ResampleAudioReader.cpp ResampleAudioReader.h
SFAudioReader.cpp SFAudioReader.h
VorbisAudioReader.cpp VorbisAudioReader.h
WPAudioReader.cpp WPAudioReader.h
Log message:
Clean up the AudioReader classes. Pull more common code into
AbstractAudioReader. Pull all traverso-specific calls out of the
AudioReaders.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/AbstractAudioReader.cpp?cvsroot=traverso&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/AbstractAudioReader.h?cvsroot=traverso&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/FlacAudioReader.cpp?cvsroot=traverso&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/FlacAudioReader.h?cvsroot=traverso&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/MadAudioReader.cpp?cvsroot=traverso&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/MadAudioReader.h?cvsroot=traverso&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ReadSource.cpp?cvsroot=traverso&r1=1.42&r2=1.43
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ReadSource.h?cvsroot=traverso&r1=1.30&r2=1.31
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ResampleAudioReader.cpp?cvsroot=traverso&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ResampleAudioReader.h?cvsroot=traverso&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/SFAudioReader.cpp?cvsroot=traverso&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/SFAudioReader.h?cvsroot=traverso&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/VorbisAudioReader.cpp?cvsroot=traverso&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/VorbisAudioReader.h?cvsroot=traverso&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/WPAudioReader.cpp?cvsroot=traverso&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/WPAudioReader.h?cvsroot=traverso&r1=1.3&r2=1.4
Patches:
Index: AbstractAudioReader.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/AbstractAudioReader.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- AbstractAudioReader.cpp 23 Jul 2007 22:33:50 -0000 1.13
+++ AbstractAudioReader.cpp 24 Jul 2007 17:57:05 -0000 1.14
@@ -64,6 +64,36 @@
}
+int AbstractAudioReader::get_num_channels()
+{
+ return m_channels;
+}
+
+
+nframes_t AbstractAudioReader::get_length()
+{
+ return m_length;
+}
+
+
+int AbstractAudioReader::get_file_rate()
+{
+ return m_rate;
+}
+
+
+bool AbstractAudioReader::eof()
+{
+ return (m_readPos >= m_length);
+}
+
+
+nframes_t AbstractAudioReader::pos()
+{
+ return m_readPos;
+}
+
+
bool AbstractAudioReader::seek(nframes_t start)
{
if (m_readPos != start) {
@@ -79,7 +109,7 @@
nframes_t AbstractAudioReader::read(audio_sample_t** buffer, nframes_t count)
{
- if (count && m_readPos < get_length()) {
+ if (count && m_readPos < m_length) {
// printf("read_from:: after_seek from %d, framepos is %d\n",
start, m_readPos);
nframes_t framesRead = read_private(buffer, count);
@@ -116,27 +146,11 @@
return 0;
}
- if (newReader->get_rate() <= 0) {
- PERROR("new reader has rate=0!");
+ if (newReader->get_num_channels() <= 0) {
+ PERROR("new reader has 0 channels!");
return 0;
}
return newReader;
}
-
-// Static method used by other classes to get an automatically resampling
AudioReader that wraps
-// an AudioReader chosen by create_audio_reader().
-AbstractAudioReader* AbstractAudioReader::create_resampled_audio_reader(const
QString& filename, int converter_type)
-{
- ResampleAudioReader* newReader;
-
- newReader = new ResampleAudioReader(filename, converter_type);
-
- if (newReader->get_rate() > 0) {
- return newReader;
- }
-
- return 0;
-}
-
Index: AbstractAudioReader.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/AbstractAudioReader.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- AbstractAudioReader.h 20 Jul 2007 23:04:21 -0000 1.11
+++ AbstractAudioReader.h 24 Jul 2007 17:57:05 -0000 1.12
@@ -37,15 +37,17 @@
AbstractAudioReader(const QString& filename);
~AbstractAudioReader();
- virtual int get_num_channels() = 0;
- virtual nframes_t get_length() = 0;
- virtual int get_rate() = 0;
+ int get_num_channels();
+ nframes_t get_length();
+ int get_file_rate();
+ bool eof();
+ nframes_t pos();
+
nframes_t read_from(audio_sample_t** buffer, nframes_t start, nframes_t
count);
bool seek(nframes_t start);
nframes_t read(audio_sample_t** buffer, nframes_t frameCount);
static AbstractAudioReader* create_audio_reader(const QString&
filename);
- static AbstractAudioReader* create_resampled_audio_reader(const
QString& filename, int converter_type);
protected:
virtual bool seek_private(nframes_t start) = 0;
@@ -53,8 +55,11 @@
QString m_fileName;
QMutex m_mutex;
- nframes_t m_readPos;
+ nframes_t m_readPos;
+ nframes_t m_channels;
+ nframes_t m_length;
+ nframes_t m_rate;
};
#endif
Index: FlacAudioReader.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/FlacAudioReader.cpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- FlacAudioReader.cpp 21 Jul 2007 01:00:23 -0000 1.9
+++ FlacAudioReader.cpp 24 Jul 2007 17:57:05 -0000 1.10
@@ -265,6 +265,12 @@
: AbstractAudioReader(filename)
{
m_flac = new FlacPrivate(filename);
+
+ if (m_flac) {
+ m_channels = m_flac->m_channels;
+ m_length = m_flac->m_samples;
+ m_rate = m_flac->m_rate;
+ }
}
@@ -337,34 +343,6 @@
}
-int FlacAudioReader::get_num_channels()
-{
- if (m_flac) {
- return m_flac->m_channels;
- }
- return 0;
-}
-
-
-nframes_t FlacAudioReader::get_length()
-{
- if (m_flac) {
- // Is this returning one frame too long?
- return m_flac->m_samples;
- }
- return 0;
-}
-
-
-int FlacAudioReader::get_rate()
-{
- if (m_flac) {
- return m_flac->m_rate;
- }
- return 0;
-}
-
-
bool FlacAudioReader::seek_private(nframes_t start)
{
Q_ASSERT(m_flac);
Index: FlacAudioReader.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/FlacAudioReader.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- FlacAudioReader.h 20 Jul 2007 23:04:21 -0000 1.4
+++ FlacAudioReader.h 24 Jul 2007 17:57:05 -0000 1.5
@@ -33,10 +33,6 @@
FlacAudioReader(QString filename);
~FlacAudioReader();
- int get_num_channels();
- nframes_t get_length();
- int get_rate();
-
static bool can_decode(QString filename);
protected:
Index: MadAudioReader.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/MadAudioReader.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- MadAudioReader.cpp 23 Jul 2007 22:33:50 -0000 1.12
+++ MadAudioReader.cpp 24 Jul 2007 17:57:05 -0000 1.13
@@ -485,10 +485,7 @@
initDecoderInternal();
- m_channels = 0;
- m_frames = countFrames();
-
- if (m_frames <= 0) {
+ if (m_length <= 0) {
d->handle->cleanup();
delete d->handle;
delete d;
@@ -505,6 +502,9 @@
m_channels = 2;
}
+ m_length = countFrames();
+ m_rate = d->firstHeader.samplerate;
+
for (int c = 0; c < m_channels; c++) {
d->overflowBuffers.append(new audio_sample_t[1152]);
}
@@ -596,38 +596,11 @@
}
-int MadAudioReader::get_num_channels()
-{
- if (d) {
- return m_channels;
- }
- return 0;
-}
-
-
-nframes_t MadAudioReader::get_length()
-{
- if (d) {
- return m_frames;
- }
- return 0;
-}
-
-
-int MadAudioReader::get_rate()
-{
- if (d) {
- return d->firstHeader.samplerate;
- }
- return 0;
-}
-
-
bool MadAudioReader::seek_private(nframes_t start)
{
Q_ASSERT(d);
- if (start >= get_length()) {
+ if (start >= m_length) {
return false;
}
@@ -644,11 +617,11 @@
//
double mp3FrameSecs =
static_cast<double>(d->firstHeader.duration.seconds) +
static_cast<double>(d->firstHeader.duration.fraction) /
static_cast<double>(MAD_TIMER_RESOLUTION);
- double posSecs = static_cast<double>(start) / get_rate();
+ double posSecs = static_cast<double>(start) / m_rate;
// seekPosition to seek after frame i
unsigned int frame = static_cast<unsigned int>(posSecs / mp3FrameSecs);
- nframes_t frameOffset = (nframes_t)(start - (frame * mp3FrameSecs *
get_rate() + 0.5));
+ nframes_t frameOffset = (nframes_t)(start - (frame * mp3FrameSecs *
m_rate + 0.5));
// K3b source: Rob said: 29 frames is the theoretically max frame
reservoir limit
// (whatever that means...) it seems that mad needs at most 29 frames
to get ready
@@ -765,7 +738,7 @@
}
if (!d->handle->inputError() && !error) {
- frames = get_rate() * (d->handle->madTimer->seconds +
(unsigned long)(
+ frames = d->firstHeader.samplerate *
(d->handle->madTimer->seconds + (unsigned long)(
(float)d->handle->madTimer->fraction/(float)MAD_TIMER_RESOLUTION));
//kdDebug() << "(K3bMadDecoder) length of track " << seconds <<
endl;
}
@@ -790,7 +763,7 @@
if (d->overflowSize > 0) {
if (d->overflowSize < frameCount) {
//printf("output all %d overflow samples\n",
d->overflowSize);
- for (int c = 0; c < get_num_channels(); c++) {
+ for (int c = 0; c < m_channels; c++) {
memcpy(d->outputBuffers[c],
d->overflowBuffers[c] + d->overflowStart, d->overflowSize *
sizeof(audio_sample_t));
}
d->outputPos += d->overflowSize;
@@ -799,7 +772,7 @@
}
else {
//printf("output %d overflow frames, returned from
overflow\n", frameCount);
- for (int c = 0; c < get_num_channels(); c++) {
+ for (int c = 0; c < m_channels; c++) {
memcpy(d->outputBuffers[c],
d->overflowBuffers[c] + d->overflowStart, frameCount * sizeof(audio_sample_t));
}
d->overflowSize -= frameCount;
@@ -839,13 +812,13 @@
// Pad end with zeros if necessary
// FIXME: This shouldn't be necessary! :P
- // is get_length() reporting incorrectly?
+ // is m_length reporting incorrectly?
// are we not outputting the last mp3-frame for some reason?
/*int remainingFramesRequested = frameCount - framesWritten;
- int remainingFramesInFile = get_length() - (m_readPos + framesWritten);
+ int remainingFramesInFile = m_length - (m_readPos + framesWritten);
if (remainingFramesRequested > 0 && remainingFramesInFile > 0) {
int padLength = (remainingFramesRequested >
remainingFramesInFile) ? remainingFramesInFile : remainingFramesRequested;
- for (int c = 0; c < get_num_channels(); c++) {
+ for (int c = 0; c < m_channels; c++) {
//memset(d->outputBuffers[c] + framesWritten, 0,
padLength * sizeof(audio_sample_t));
}
framesWritten += padLength;
@@ -853,12 +826,12 @@
}
// Truncate so we don't return too many frames
- if (framesWritten + m_readPos > get_length()) {
- printf("truncating by %d!\n", get_length() - (framesWritten +
m_readPos));
- framesWritten = get_length() - m_readPos;
+ if (framesWritten + m_readPos > m_length) {
+ printf("truncating by %d!\n", m_length - (framesWritten +
m_readPos));
+ framesWritten = m_length - m_readPos;
}*/
- //printf("request: %d (returned: %d), now at: %lu (total: %lu)\n",
frameCount, framesWritten, m_readPos + framesWritten, m_frames);
+ //printf("request: %d (returned: %d), now at: %lu (total: %lu)\n",
frameCount, framesWritten, m_readPos + framesWritten, m_length);
return framesWritten;
}
@@ -872,9 +845,9 @@
bool overflow = false;
int i;
- if (writeBuffers && (m_readPos + d->outputPos + nframes) >
get_length()) {
- nframes = get_length() - (m_readPos + offset);
- //printf("!!!nframes: %lu, length: %lu, current: %lu\n",
nframes, get_length(), d->outputPos + m_readPos);
+ if (writeBuffers && (m_readPos + d->outputPos + nframes) > m_length) {
+ nframes = m_length - (m_readPos + offset);
+ //printf("!!!nframes: %lu, length: %lu, current: %lu\n",
nframes, m_length, d->outputPos + m_readPos);
}
// now create the output
Index: MadAudioReader.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/MadAudioReader.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- MadAudioReader.h 20 Jul 2007 23:04:21 -0000 1.5
+++ MadAudioReader.h 24 Jul 2007 17:57:05 -0000 1.6
@@ -35,10 +35,6 @@
MadAudioReader(QString filename);
~MadAudioReader();
- int get_num_channels();
- nframes_t get_length();
- int get_rate();
-
static bool can_decode(QString filename);
protected:
@@ -50,8 +46,6 @@
bool createPcmSamples(mad_synth* synth);
static int MaxAllowedRecoverableErrors;
- nframes_t m_frames;
- int m_channels;
class MadDecoderPrivate;
MadDecoderPrivate* d;
Index: ReadSource.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/ReadSource.cpp,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -b -r1.42 -r1.43
--- ReadSource.cpp 18 Jul 2007 18:15:21 -0000 1.42
+++ ReadSource.cpp 24 Jul 2007 17:57:06 -0000 1.43
@@ -21,6 +21,7 @@
#include "ReadSource.h"
#include "AbstractAudioReader.h"
+#include "ResampleAudioReader.h"
#include "Peak.h"
#include "ProjectManager.h"
@@ -172,7 +173,11 @@
converter_type = config().get_property("Conversion",
"RTResamplingConverterType", 2).toInt();
// There should be another config option for ConverterType to
use for export (higher quality)
//converter_type = config().get_property("Conversion",
"ExportResamplingConverterType", 0).toInt();
- m_audioReader =
AbstractAudioReader::create_resampled_audio_reader(m_fileName, converter_type);
+ m_audioReader = new ResampleAudioReader(m_fileName,
converter_type);
+ if (m_audioReader) {
+ output_rate_changed();
+ connect(&audiodevice(), SIGNAL(driverParamsChanged()),
this, SLOT(output_rate_changed()));
+ }
}
else {
m_audioReader =
AbstractAudioReader::create_audio_reader(m_fileName);
@@ -197,7 +202,7 @@
}
m_length = m_audioReader->get_length();
- m_rate = m_audioReader->get_rate();
+ m_rate = m_audioReader->get_file_rate();
m_bufferstatus = new BufferStatus;
@@ -205,6 +210,12 @@
}
+void ReadSource::output_rate_changed()
+{
+
((ResampleAudioReader*)m_audioReader)->set_output_rate(audiodevice().get_sample_rate());
+}
+
+
int ReadSource::file_read(audio_sample_t** dst, nframes_t start, nframes_t
cnt, audio_sample_t* readbuffer) const
{
#if defined (profile)
@@ -220,8 +231,6 @@
return (int)result;
}
- float *ptr;
-
// The readbuffer 'assumes' that there is max 2 channels...
Q_ASSERT(m_audioReader->get_num_channels() <= 2);
@@ -231,18 +240,6 @@
if (processtime > 40000)
printf("Process time for %s: %d useconds\n\n",
QS_C(m_fileName), processtime);
#endif
- /*ptr = readbuffer;
-
- for (int32_t n = 0; n < nread; ++n) {
- dst[0][n] = *ptr;
- ptr += m_audioReader->get_num_channels();
- }
-
- ptr = readbuffer+1;
- for (int32_t n = 0; n < nread; ++n) {
- dst[1][n] = *ptr;
- ptr += m_audioReader->get_num_channels();
- }*/
return nread;
}
Index: ReadSource.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/ReadSource.h,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -b -r1.30 -r1.31
--- ReadSource.h 18 Jul 2007 13:13:06 -0000 1.30
+++ ReadSource.h 24 Jul 2007 17:57:06 -0000 1.31
@@ -68,6 +68,9 @@
size_t is_active() const;
BufferStatus* get_buffer_status();
+public slots:
+ void output_rate_changed();
+
private:
QList<RingBufferNPT<float>*> m_buffers;
AbstractAudioReader* m_audioReader;
Index: ResampleAudioReader.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/ResampleAudioReader.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- ResampleAudioReader.cpp 23 Jul 2007 16:23:39 -0000 1.13
+++ ResampleAudioReader.cpp 24 Jul 2007 17:57:06 -0000 1.14
@@ -22,7 +22,6 @@
#include "ResampleAudioReader.h"
#include <QString>
#include "Utils.h"
-#include "AudioDevice.h"
#define OVERFLOW_SIZE 1024
@@ -41,6 +40,11 @@
return;
}
+ m_channels = m_reader->get_num_channels();
+ m_rate = m_reader->get_file_rate();
+ m_length = m_reader->get_length();
+ m_outputRate = m_rate;
+
m_fileBuffers.resize(get_num_channels());
m_filePointers.resize(get_num_channels());
m_fileBufferLength = 0;
@@ -102,46 +106,22 @@
m_srcData.end_of_input = 0;
m_overflowUsed = 0;
- m_eof = 0;
}
-// Get from child AudioReader
-int ResampleAudioReader::get_num_channels()
+int ResampleAudioReader::get_output_rate()
{
- if (m_reader) {
- return m_reader->get_num_channels();
- }
-
- return 0;
+ return m_outputRate;
}
-// Get from child AudioReader, convert from file's frames to song's frames
-nframes_t ResampleAudioReader::get_length()
+void ResampleAudioReader::set_output_rate(int rate)
{
- if (m_reader) {
- if (audiodevice().get_sample_rate() ==
(uint)m_reader->get_rate()) {
- return m_reader->get_length();
- }
- return file_to_song_frame(m_reader->get_length());
- }
-
- return 0;
-}
-
-
-// Always the rate of the audio device
-// Remon @ Ben: why is that? imo it should just return the real rate, how else
-// is anything gonna to know what the 'real' rate of an audiofile is ?
-int ResampleAudioReader::get_rate()
-{
- if (m_reader) {
- return m_reader->get_rate();
-// return audiodevice().get_sample_rate();
+ if (!m_reader) {
+ return;
}
-
- return 0;
+ m_outputRate = rate;
+ m_length = file_to_song_frame(m_reader->get_length());
}
@@ -151,7 +131,7 @@
{
Q_ASSERT(m_reader);
- if (audiodevice().get_sample_rate() == (uint)m_reader->get_rate()) {
+ if (m_outputRate == m_rate) {
return m_reader->seek(start);
}
@@ -168,7 +148,7 @@
Q_ASSERT(m_reader);
// pass through if not changing sampleRate.
- if (audiodevice().get_sample_rate() == (uint)m_reader->get_rate()) {
+ if (m_outputRate == m_rate) {
return m_reader->read(buffer, frameCount);
}
@@ -183,10 +163,10 @@
bufferUsed = m_overflowUsed;
- if (!m_eof) { // FIXME: add and use Reader::eof()
+ if (!m_reader->eof()) {
// make sure that the reusable m_fileBuffers are big enough for
this read + OVERFLOW_SIZE
if ((uint)m_fileBufferLength < fileCnt + OVERFLOW_SIZE) {
- for (int c = 0; c < get_num_channels(); c++) {
+ for (int c = 0; c < m_channels; c++) {
if (m_fileBufferLength) {
delete m_fileBuffers[c];
}
@@ -195,7 +175,7 @@
m_fileBufferLength = fileCnt + OVERFLOW_SIZE;
}
- for (int c = 0; c < get_num_channels(); c++) {
+ for (int c = 0; c < m_channels; c++) {
m_filePointers[c] = m_fileBuffers[c] + m_overflowUsed;
}
@@ -203,23 +183,22 @@
//printf("Resampler: Read %lu of %lu (%lu)\n", bufferUsed,
fileCnt + OVERFLOW_SIZE - m_overflowUsed, m_reader->get_length());
}
- if (bufferUsed < fileCnt) {
+ if (m_reader->eof()) {
m_srcData.end_of_input = 1;
- m_eof = 1;
}
nframes_t framesToConvert = frameCount;
- if (frameCount > get_length() - m_readPos) {
- framesToConvert = get_length() - m_readPos;
+ if (frameCount > m_length - m_readPos) {
+ framesToConvert = m_length - m_readPos;
}
- for (int c = 0; c < get_num_channels(); c++) {
+ for (int c = 0; c < m_channels; c++) {
// Set up sample rate converter struct for s.r.c. processing
m_srcData.data_in = m_fileBuffers[c];
m_srcData.input_frames = bufferUsed;
m_srcData.data_out = buffer[c];
m_srcData.output_frames = framesToConvert;
- m_srcData.src_ratio = (double) audiodevice().get_sample_rate()
/ m_reader->get_rate();
+ m_srcData.src_ratio = (double) m_outputRate / m_rate;
src_set_ratio(m_srcStates[c], m_srcData.src_ratio);
if (src_process(m_srcStates[c], &m_srcData)) {
@@ -236,7 +215,7 @@
}
if (m_srcData.input_frames_used < bufferUsed) {
- for (int c = 0; c < get_num_channels(); c++) {
+ for (int c = 0; c < m_channels; c++) {
memmove(m_fileBuffers[c], m_fileBuffers[c] +
m_srcData.input_frames_used, m_overflowUsed * sizeof(audio_sample_t));
}
}
@@ -244,7 +223,7 @@
// Pad end of file with 0s if necessary
if (framesRead == 0 && m_readPos < get_length()) {
int padLength = m_readPos;
- for (int c = 0; c < get_num_channels(); c++) {
+ for (int c = 0; c < m_channels; c++) {
memset(buffer[c] + framesRead, 0, padLength *
sizeof(audio_sample_t));
}
framesRead += padLength;
@@ -267,7 +246,7 @@
{
Q_ASSERT(m_reader);
- return (nframes_t)(frame * (((double) m_reader->get_rate()) /
audiodevice().get_sample_rate()));
+ return (nframes_t)(frame * ((double) m_rate / m_outputRate));
}
@@ -275,6 +254,6 @@
{
Q_ASSERT(m_reader);
- return (nframes_t)(frame * (((double) audiodevice().get_sample_rate())
/ m_reader->get_rate()));
+ return (nframes_t)(frame * ((double) m_outputRate / m_rate));
}
Index: ResampleAudioReader.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/ResampleAudioReader.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- ResampleAudioReader.h 23 Jul 2007 16:23:39 -0000 1.10
+++ ResampleAudioReader.h 24 Jul 2007 17:57:06 -0000 1.11
@@ -34,9 +34,8 @@
ResampleAudioReader(QString filename, int converter_type);
~ResampleAudioReader();
- int get_num_channels();
- nframes_t get_length();
- int get_rate();
+ int get_output_rate();
+ void set_output_rate(int rate);
protected:
void init(int converter_type);
@@ -56,7 +55,7 @@
QVector<audio_sample_t*> m_filePointers;
long m_fileBufferLength;
long m_overflowUsed;
- bool m_eof;
+ int m_outputRate;
};
#endif
Index: SFAudioReader.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/SFAudioReader.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- SFAudioReader.cpp 20 Jul 2007 23:04:21 -0000 1.7
+++ SFAudioReader.cpp 24 Jul 2007 17:57:06 -0000 1.8
@@ -42,6 +42,10 @@
PERROR("Couldn't open soundfile (%s)", QS_C(m_fileName));
}
+ m_channels = m_sfinfo.channels;
+ m_length = m_sfinfo.frames;
+ m_rate = m_sfinfo.samplerate;
+
m_tmpBuffer = 0;
m_tmpBufferSize = 0;
}
@@ -84,39 +88,12 @@
}
-int SFAudioReader::get_num_channels()
-{
- if (m_sf) {
- return m_sfinfo.channels;
- }
- return 0;
-}
-
-
-nframes_t SFAudioReader::get_length()
-{
- if (m_sf) {
- return m_sfinfo.frames;
- }
- return 0;
-}
-
-
-int SFAudioReader::get_rate()
-{
- if (m_sf) {
- return m_sfinfo.samplerate;
- }
- return 0;
-}
-
-
bool SFAudioReader::seek_private(nframes_t start)
{
Q_ASSERT(m_sf);
- if (start >= get_length()) {
+ if (start >= m_length) {
return false;
}
@@ -140,12 +117,12 @@
if (m_tmpBuffer) {
delete m_tmpBuffer;
}
- m_tmpBuffer = new audio_sample_t[frameCount *
get_num_channels()];
+ m_tmpBuffer = new audio_sample_t[frameCount * m_channels];
}
nframes_t framesRead = sf_readf_float(m_sf, m_tmpBuffer, frameCount);
// De-interlace
- switch (get_num_channels()) {
+ switch (m_channels) {
case 1:
memcpy(buffer[0], m_tmpBuffer, framesRead *
sizeof(audio_sample_t));
break;
@@ -157,8 +134,8 @@
break;
default:
for (int f = 0; f < framesRead; f++) {
- for (int c = 0; c < get_num_channels(); c++) {
- buffer[c][f] = m_tmpBuffer[f *
get_num_channels() + c];
+ for (int c = 0; c < m_channels; c++) {
+ buffer[c][f] = m_tmpBuffer[f *
m_channels + c];
}
}
}
Index: SFAudioReader.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/SFAudioReader.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- SFAudioReader.h 20 Jul 2007 23:04:21 -0000 1.5
+++ SFAudioReader.h 24 Jul 2007 17:57:06 -0000 1.6
@@ -32,10 +32,6 @@
SFAudioReader(QString filename);
~SFAudioReader();
- int get_num_channels();
- nframes_t get_length();
- int get_rate();
-
static bool can_decode(QString filename);
protected:
Index: VorbisAudioReader.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/VorbisAudioReader.cpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- VorbisAudioReader.cpp 20 Jul 2007 23:04:21 -0000 1.9
+++ VorbisAudioReader.cpp 24 Jul 2007 17:57:06 -0000 1.10
@@ -51,6 +51,10 @@
ov_pcm_seek(&m_vf, 0);
m_vi = ov_info(&m_vf,-1);
+
+ m_channels = m_vi->channels;
+ m_length = ov_pcm_total(&m_vf, -1);
+ m_rate = m_vi->rate;
}
@@ -83,38 +87,11 @@
}
-int VorbisAudioReader::get_num_channels()
-{
- if (m_file) {
- return m_vi->channels;
- }
- return 0;
-}
-
-
-nframes_t VorbisAudioReader::get_length()
-{
- if (m_file) {
- return ov_pcm_total(&m_vf, -1);
- }
- return 0;
-}
-
-
-int VorbisAudioReader::get_rate()
-{
- if (m_file) {
- return m_vi->rate;
- }
- return 0;
-}
-
-
bool VorbisAudioReader::seek_private(nframes_t start)
{
Q_ASSERT(m_file);
- if (start >= get_length()) {
+ if (start >= m_length) {
return false;
}
@@ -152,7 +129,7 @@
break;
}
- for (int c=0; c < get_num_channels(); c++) {
+ for (int c=0; c < m_channels; c++) {
memcpy(buffer[c] + totalFramesRead, tmp[c], framesRead
* sizeof(audio_sample_t));
}
totalFramesRead += framesRead;
Index: VorbisAudioReader.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/VorbisAudioReader.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- VorbisAudioReader.h 20 Jul 2007 23:04:21 -0000 1.6
+++ VorbisAudioReader.h 24 Jul 2007 17:57:06 -0000 1.7
@@ -34,10 +34,6 @@
VorbisAudioReader(QString filename);
~VorbisAudioReader();
- int get_num_channels();
- nframes_t get_length();
- int get_rate();
-
static bool can_decode(QString filename);
protected:
Index: WPAudioReader.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/WPAudioReader.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- WPAudioReader.cpp 20 Jul 2007 23:04:21 -0000 1.4
+++ WPAudioReader.cpp 24 Jul 2007 17:57:06 -0000 1.5
@@ -42,6 +42,8 @@
m_isFloat = ((WavpackGetMode(m_wp) & MODE_FLOAT) != 0);
m_bitsPerSample = WavpackGetBitsPerSample(m_wp);
m_channels = WavpackGetReducedChannels(m_wp);
+ m_length = WavpackGetNumSamples(m_wp);
+ m_rate = WavpackGetSampleRate(m_wp);
m_tmpBuffer = 0;
m_tmpBufferSize = 0;
@@ -76,39 +78,12 @@
}
-int WPAudioReader::get_num_channels()
-{
- if (m_wp) {
- return m_channels;
- }
- return 0;
-}
-
-
-nframes_t WPAudioReader::get_length()
-{
- if (m_wp) {
- return WavpackGetNumSamples(m_wp);
- }
- return 0;
-}
-
-
-int WPAudioReader::get_rate()
-{
- if (m_wp) {
- return WavpackGetSampleRate(m_wp);
- }
- return 0;
-}
-
-
bool WPAudioReader::seek_private(nframes_t start)
{
Q_ASSERT(m_wp);
- if (start >= get_length()) {
+ if (start >= m_length) {
return false;
}
@@ -130,13 +105,13 @@
if (m_tmpBuffer) {
delete m_tmpBuffer;
}
- m_tmpBuffer = new int32_t[frameCount * get_num_channels()];
+ m_tmpBuffer = new int32_t[frameCount * m_channels];
}
nframes_t framesRead = WavpackUnpackSamples(m_wp, m_tmpBuffer,
frameCount);
// De-interlace
if (m_isFloat) {
- switch (get_num_channels()) {
+ switch (m_channels) {
case 1:
memcpy(buffer[0], m_tmpBuffer, framesRead *
sizeof(audio_sample_t));
break;
@@ -148,14 +123,14 @@
break;
default:
for (int f = 0; f < framesRead; f++) {
- for (int c = 0; c < get_num_channels();
c++) {
- buffer[c][f] =
((float*)m_tmpBuffer)[f * get_num_channels() + c];
+ for (int c = 0; c < m_channels; c++) {
+ buffer[c][f] =
((float*)m_tmpBuffer)[f * m_channels + c];
}
}
}
}
else {
- switch (get_num_channels()) {
+ switch (m_channels) {
case 1:
for (int f = 0; f < framesRead; f++) {
buffer[0][f] =
(float)((float)m_tmpBuffer[f]/ (float)((uint)1<<(m_bitsPerSample-1)));
@@ -169,8 +144,8 @@
break;
default:
for (int f = 0; f < framesRead; f++) {
- for (int c = 0; c < get_num_channels();
c++) {
- buffer[c][f] =
(float)((float)m_tmpBuffer[f + get_num_channels() + c]/
(float)((uint)1<<(m_bitsPerSample-1)));
+ for (int c = 0; c < m_channels; c++) {
+ buffer[c][f] =
(float)((float)m_tmpBuffer[f + m_channels + c]/
(float)((uint)1<<(m_bitsPerSample-1)));
}
}
}
Index: WPAudioReader.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/WPAudioReader.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- WPAudioReader.h 20 Jul 2007 23:04:21 -0000 1.3
+++ WPAudioReader.h 24 Jul 2007 17:57:06 -0000 1.4
@@ -32,10 +32,6 @@
WPAudioReader(QString filename);
~WPAudioReader();
- int get_num_channels();
- nframes_t get_length();
- int get_rate();
-
static bool can_decode(QString filename);
protected:
@@ -45,7 +41,6 @@
WavpackContext* m_wp;
bool m_isFloat;
int m_bitsPerSample;
- int m_channels;
int32_t *m_tmpBuffer;
int m_tmpBufferSize;
};
- [Traverso-commit] traverso/src/core AbstractAudioReader.cpp Abstr..., Ben Levitt, 2007/07/08
- [Traverso-commit] traverso/src/core AbstractAudioReader.cpp Abstr..., Ben Levitt, 2007/07/09
- [Traverso-commit] traverso/src/core AbstractAudioReader.cpp Abstr..., Ben Levitt, 2007/07/13
- [Traverso-commit] traverso/src/core AbstractAudioReader.cpp Abstr..., Ben Levitt, 2007/07/15
- [Traverso-commit] traverso/src/core AbstractAudioReader.cpp Abstr..., Ben Levitt, 2007/07/18
- [Traverso-commit] traverso/src/core AbstractAudioReader.cpp Abstr..., Ben Levitt, 2007/07/19
- [Traverso-commit] traverso/src/core AbstractAudioReader.cpp Abstr..., Ben Levitt, 2007/07/20
- [Traverso-commit] traverso/src/core AbstractAudioReader.cpp Abstr...,
Ben Levitt <=
- [Traverso-commit] traverso/src/core AbstractAudioReader.cpp Abstr..., Ben Levitt, 2007/07/25