summaryrefslogtreecommitdiff
path: root/libs/rubberband/src/StretcherImpl.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/rubberband/src/StretcherImpl.h')
-rw-r--r--libs/rubberband/src/StretcherImpl.h202
1 files changed, 0 insertions, 202 deletions
diff --git a/libs/rubberband/src/StretcherImpl.h b/libs/rubberband/src/StretcherImpl.h
deleted file mode 100644
index 996c61b7ef..0000000000
--- a/libs/rubberband/src/StretcherImpl.h
+++ /dev/null
@@ -1,202 +0,0 @@
-/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
-
-/*
- Rubber Band
- An audio time-stretching and pitch-shifting library.
- Copyright 2007-2008 Chris Cannam.
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version. See the file
- COPYING included with this distribution for more information.
-*/
-
-#ifndef _RUBBERBAND_STRETCHERIMPL_H_
-#define _RUBBERBAND_STRETCHERIMPL_H_
-
-#include "RubberBandStretcher.h"
-
-#include "Window.h"
-#include "Thread.h"
-#include "RingBuffer.h"
-#include "FFT.h"
-#include "sysutils.h"
-
-#include <set>
-
-namespace RubberBand
-{
-
-class AudioCurve;
-class StretchCalculator;
-
-class RubberBandStretcher::Impl
-{
-public:
- Impl(size_t sampleRate, size_t channels, Options options,
- double initialTimeRatio, double initialPitchScale);
- ~Impl();
-
- void reset();
- void setTimeRatio(double ratio);
- void setPitchScale(double scale);
-
- double getTimeRatio() const;
- double getPitchScale() const;
-
- size_t getLatency() const;
-
- void setTransientsOption(Options);
- void setPhaseOption(Options);
- void setFormantOption(Options);
- void setPitchOption(Options);
-
- void setExpectedInputDuration(size_t samples);
- void setMaxProcessSize(size_t samples);
-
- size_t getSamplesRequired() const;
-
- void study(const float *const *input, size_t samples, bool final);
- void process(const float *const *input, size_t samples, bool final);
-
- int available() const;
- size_t retrieve(float *const *output, size_t samples) const;
-
- float getFrequencyCutoff(int n) const;
- void setFrequencyCutoff(int n, float f);
-
- size_t getInputIncrement() const {
- return m_increment;
- }
-
- std::vector<int> getOutputIncrements() const;
- std::vector<float> getPhaseResetCurve() const;
- std::vector<int> getExactTimePoints() const;
-
- size_t getChannelCount() const {
- return m_channels;
- }
-
- void calculateStretch();
-
- void setDebugLevel(int level);
- static void setDefaultDebugLevel(int level) { m_defaultDebugLevel = level; }
-
-protected:
- size_t m_sampleRate;
- size_t m_channels;
-
- size_t consumeChannel(size_t channel, const float *input,
- size_t samples, bool final);
- void processChunks(size_t channel, bool &any, bool &last);
- bool processOneChunk(); // across all channels, for real time use
- bool processChunkForChannel(size_t channel, size_t phaseIncrement,
- size_t shiftIncrement, bool phaseReset);
- bool testInbufReadSpace(size_t channel);
- void calculateIncrements(size_t &phaseIncrement,
- size_t &shiftIncrement, bool &phaseReset);
- bool getIncrements(size_t channel, size_t &phaseIncrement,
- size_t &shiftIncrement, bool &phaseReset);
- void analyseChunk(size_t channel);
- void modifyChunk(size_t channel, size_t outputIncrement, bool phaseReset);
- void formantShiftChunk(size_t channel);
- void synthesiseChunk(size_t channel);
- void writeChunk(size_t channel, size_t shiftIncrement, bool last);
-
- void calculateSizes();
- void configure();
- void reconfigure();
-
- double getEffectiveRatio() const;
-
- size_t roundUp(size_t value); // to next power of two
-
- bool resampleBeforeStretching() const;
-
- double m_timeRatio;
- double m_pitchScale;
-
- size_t m_windowSize;
- size_t m_increment;
- size_t m_outbufSize;
-
- size_t m_maxProcessSize;
- size_t m_expectedInputDuration;
-
- bool m_threaded;
- bool m_realtime;
- Options m_options;
- int m_debugLevel;
-
- enum ProcessMode {
- JustCreated,
- Studying,
- Processing,
- Finished
- };
-
- ProcessMode m_mode;
-
- std::map<size_t, Window<float> *> m_windows;
- Window<float> *m_window;
- FFT *m_studyFFT;
-
- Condition m_spaceAvailable;
-
- class ProcessThread : public Thread
- {
- public:
- ProcessThread(Impl *s, size_t c);
- void run();
- void signalDataAvailable();
- void abandon();
- private:
- Impl *m_s;
- size_t m_channel;
- Condition m_dataAvailable;
- bool m_abandoning;
- };
-
- mutable Mutex m_threadSetMutex;
- typedef std::set<ProcessThread *> ThreadSet;
- ThreadSet m_threadSet;
-
-
- size_t m_inputDuration;
- std::vector<float> m_phaseResetDf;
- std::vector<float> m_stretchDf;
- std::vector<bool> m_silence;
- int m_silentHistory;
-
- class ChannelData;
- std::vector<ChannelData *> m_channelData;
-
- std::vector<int> m_outputIncrements;
-
- mutable RingBuffer<int> m_lastProcessOutputIncrements;
- mutable RingBuffer<float> m_lastProcessPhaseResetDf;
-
- AudioCurve *m_phaseResetAudioCurve;
- AudioCurve *m_stretchAudioCurve;
- AudioCurve *m_silentAudioCurve;
- StretchCalculator *m_stretchCalculator;
-
- float m_freq0;
- float m_freq1;
- float m_freq2;
-
- size_t m_baseWindowSize;
- float m_rateMultiple;
-
- void writeOutput(RingBuffer<float> &to, float *from,
- size_t qty, size_t &outCount, size_t theoreticalOut);
-
- static int m_defaultDebugLevel;
- static const size_t m_defaultIncrement;
- static const size_t m_defaultWindowSize;
-};
-
-}
-
-#endif