Mercurial > hg > sonic-visualiser
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