diff audioio/AudioCallbackPlaySource.h @ 16:3715efc38f95

* substantial enhancements to time stretcher: -- use putInput/getOutput methods to ensure the audio source always feeds it enough input, avoiding underruns due to rounding error -- add a percussion detector and an optional "Sharpen" toggle to the main window, which invokes a very basic variable speed timestretcher
author Chris Cannam
date Wed, 13 Sep 2006 17:17:42 +0000
parents cc566264c935
children d88d117e0c34
line wrap: on
line diff
--- a/audioio/AudioCallbackPlaySource.h	Wed Sep 13 11:56:44 2006 +0000
+++ b/audioio/AudioCallbackPlaySource.h	Wed Sep 13 17:17:42 2006 +0000
@@ -177,7 +177,7 @@
      */
     size_t getSourceSamples(size_t count, float **buffer);
 
-    void setSlowdownFactor(float factor);
+    void setSlowdownFactor(float factor, bool sharpen);
 
 signals:
     void modelReplaced();
@@ -244,31 +244,8 @@
     void clearRingBuffers(bool haveLock = false, size_t count = 0);
     void unifyRingBuffers();
 
-    class TimeStretcherData
-    {
-    public:
-	TimeStretcherData(size_t channels, float factor, size_t blockSize);
-	~TimeStretcherData();
-
-	float getFactor() const { return m_factor; }
-	PhaseVocoderTimeStretcher *getStretcher(size_t channel);
-//	float *getOutputBuffer(size_t channel);
-//	float *getInputBuffer();
-	
-//	void run(size_t channel);
-
-    protected:
-	TimeStretcherData(const TimeStretcherData &); // not provided
-	TimeStretcherData &operator=(const TimeStretcherData &); // not provided
-
-	std::map<size_t, PhaseVocoderTimeStretcher *> m_stretcher;
-	float m_factor;
-	size_t m_blockSize;
-    };
-
-    size_t m_slowdownCounter;
-    TimeStretcherData *m_timeStretcher;
-    Scavenger<TimeStretcherData> m_timeStretcherScavenger;
+    PhaseVocoderTimeStretcher *m_timeStretcher;
+    Scavenger<PhaseVocoderTimeStretcher> m_timeStretcherScavenger;
 
     // Called from fill thread, m_playing true, mutex held
     // Return true if work done