traverso-commit
[Top][All Lists]
Advanced

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

[Traverso-commit] traverso/src audiofileio/decode/AbstractAudioRe...


From: Remon Sijrier
Subject: [Traverso-commit] traverso/src audiofileio/decode/AbstractAudioRe...
Date: Wed, 19 Sep 2007 20:27:47 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Remon Sijrier <r_sijrier>       07/09/19 20:27:47

Modified files:
        src/audiofileio/decode: AbstractAudioReader.h 
                                ResampleAudioReader.cpp 
        src/core       : ReadSource.cpp 

Log message:
        * due rounding issues, the length of the ResampledAudioReader can 
differ slightly with different output rates. So always fetch the length of the 
reader when changing the output rate!

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/decode/AbstractAudioReader.h?cvsroot=traverso&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/decode/ResampleAudioReader.cpp?cvsroot=traverso&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ReadSource.cpp?cvsroot=traverso&r1=1.58&r2=1.59

Patches:
Index: audiofileio/decode/AbstractAudioReader.h
===================================================================
RCS file: 
/sources/traverso/traverso/src/audiofileio/decode/AbstractAudioReader.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- audiofileio/decode/AbstractAudioReader.h    18 Sep 2007 19:15:20 -0000      
1.12
+++ audiofileio/decode/AbstractAudioReader.h    19 Sep 2007 20:27:46 -0000      
1.13
@@ -100,6 +100,7 @@
                        delete [] readBuffer;
                }
                readBuffer = 0;
+               readBufferSize = 0;
        }
        
        void delete_resample_buffers() {
@@ -112,6 +113,7 @@
                        delete [] resampleBuffer;
                }
                resampleBuffer = 0;
+               resampleBufferSize = 0;
        }
 
 };

Index: audiofileio/decode/ResampleAudioReader.cpp
===================================================================
RCS file: 
/sources/traverso/traverso/src/audiofileio/decode/ResampleAudioReader.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- audiofileio/decode/ResampleAudioReader.cpp  18 Sep 2007 15:52:18 -0000      
1.11
+++ audiofileio/decode/ResampleAudioReader.cpp  19 Sep 2007 20:27:46 -0000      
1.12
@@ -147,6 +147,7 @@
        }
        m_outputRate = rate;
        m_nframes = file_to_resampled_frame(m_reader->get_nframes());
+       m_length = TimeRef(m_nframes, m_outputRate);
 }
 
 
@@ -161,7 +162,7 @@
        }
        
        reset();
-       
+//     printf("ResampleAudioReader::seek_private: start: %d\n", 
resampled_to_file_frame(start));
        return m_reader->seek(resampled_to_file_frame(start));
 }
 
@@ -264,7 +265,7 @@
                framesRead = get_nframes() - m_readPos;
        }
        
-       //printf("framesRead: %lu of %lu (overflow: %lu) (at: %lu of %lu)\n", 
framesRead, frameCount, m_overflowUsed, m_readPos + framesRead, get_nframes());
+//     printf("framesRead: %lu of %lu (overflow: %lu) (at: %lu of %lu)\n", 
framesRead, frameCount, m_overflowUsed, m_readPos /*+ framesRead*/, 
get_nframes());
        
        return framesRead;
 }
@@ -272,17 +273,15 @@
 
 nframes_t ResampleAudioReader::resampled_to_file_frame(nframes_t frame)
 {
-       Q_ASSERT(m_reader);
-       
-       return (nframes_t)(frame * ((double) m_rate / m_outputRate));
+       TimeRef location(frame, m_outputRate);
+       return location.to_frame(m_rate);
 }
 
 
 nframes_t ResampleAudioReader::file_to_resampled_frame(nframes_t frame)
 {
-       Q_ASSERT(m_reader);
-       
-       return (nframes_t)(frame * ((double) m_outputRate / m_rate));
+       TimeRef location(frame, m_rate);
+       return location.to_frame(m_outputRate);
 }
 
 void ResampleAudioReader::create_overflow_buffers()

Index: core/ReadSource.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/ReadSource.cpp,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -b -r1.58 -r1.59
--- core/ReadSource.cpp 17 Sep 2007 13:40:34 -0000      1.58
+++ core/ReadSource.cpp 19 Sep 2007 20:27:46 -0000      1.59
@@ -271,6 +271,11 @@
        ResampleAudioReader* reader = 
dynamic_cast<ResampleAudioReader*>(m_audioReader);
        if (reader) {
                reader->set_output_rate(rate);
+               // The length could have become slightly smaller/larger due
+               // rounding issues involved with converting to one samplerate 
to another.
+               // Should be at the order of one sample at most, but for 
reading purposes we 
+               // need sample accurate information!
+               m_length = reader->get_length();
        }
 }
 
@@ -282,11 +287,6 @@
 #endif
        
        int rate = audiodevice().get_sample_rate();
-       ResampleAudioReader* reader = 
dynamic_cast<ResampleAudioReader*>(m_audioReader);
-       if (reader) {
-               rate = reader->get_output_rate();
-       }
-       
        nframes_t result = m_audioReader->read_from(buffer, 
start.to_frame(rate), cnt);
 
 #if defined (profile)
@@ -380,7 +380,6 @@
                        
                        m_rbRelativeFileReadPos += advance;
                } else {
-                       printf("calling start_resync\n");
                        TimeRef synclocation = start + 
m_clip->get_track_start_location() + m_clip->get_source_start_location();
                        start_resync(synclocation);
                        return 0;
@@ -454,7 +453,7 @@
 {
        // Do nothing if we passed the lenght of the AudioFile.
        if (m_rbFileReadPos >= m_length) {
-//             printf("returning, m_rbFileReadPos > m_length! (%d >  %d)\n", 
m_rbFileReadPos, m_source->m_length);
+//             printf("returning, m_rbFileReadPos > m_length! (%d >  %d)\n", 
m_rbFileReadPos.to_frame(get_rate()), m_audioReader->get_nframes());
                if (m_syncInProgress) {
                        finish_resync();
                }
@@ -503,7 +502,7 @@
 
 void ReadSource::start_resync(TimeRef& position)
 {
-       printf("starting resync!\n");
+//     printf("starting resync!\n");
        m_syncPos = position;
        m_rbReady = 0;
        m_needSync = 1;
@@ -511,7 +510,7 @@
 
 void ReadSource::finish_resync()
 {
-       printf("sync finished\n");
+//     printf("sync finished\n");
        m_needSync = 0;
        m_bufferUnderRunDetected = 0;
        m_rbReady = 1;
@@ -574,6 +573,8 @@
 {
        int freespace = m_buffers.at(0)->write_space();
 
+//     printf("m_rbFileReadPos, m_length %d, %d\n", 
m_rbFileReadPos.to_frame(get_rate()), m_length.to_frame(get_rate()));
+
        if (m_rbFileReadPos >= m_length) {
                m_bufferstatus->fillStatus =  100;
                freespace = 0;




reply via email to

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