Krotos Modules 3
Loading...
Searching...
No Matches
PhaseVocoder.h
Go to the documentation of this file.
1namespace krotos
2{
3 //==============================================================================
16 {
17 public:
21 {
23 // TODO: implement more !!!
27 };
28
30 PhaseVocoder(int fftSize, int hopSize, int inputBufferSize, WindowType windowFunction);
31
32 ~PhaseVocoder() = default;
33
34 float process(float inputSample, int channelToUse);
35
37 void setWindowFunction(WindowType windowType);
38
39 void setGeneralParam(float paramVaue);
40
41 void setMode(PhaseVocoderMode newMode) { m_mode = newMode; };
42
43 void setSampleRate(float sampleRate) { m_sampleRate = sampleRate; };
44
45 private:
49 void processFrame(std::vector<float>& inBuffer, int inPointer, std::vector<float>& outBuffer, int outPointer);
50
52 void robotize(std::vector<float>& fftData);
53
55 void pitchShift(std::vector<float>& fftData);
56
58 void timeStrech(std::vector<float>& fftData);
59
61 void detectFrequency(std::vector<float>& fftData);
62
64 void setNumChannels(int newValue);
65
67 float wrapToPi(float phaseIn);
68
69 float caclulateFrameRMS(std::vector<float> inputFrame);
70
72 // fft window size in samples
74 // hopSize in samples i.e. how often we caclulate the fft
76 int m_hopSizeSynthesis; // for time streching
77
78 float m_sampleRate{0.0f};
79
80 // fft processing object
81 dsp::FFT m_fft;
82 // window function
83 std::vector<float> m_analysisWindow;
84 std::vector<float> m_synthesisWindow;
87
88 // circular input buffer, assembles a window of samples
90 std::vector<std::vector<float>> m_inputBuffer;
91 // one write pointer per channel
92 std::vector<int> m_inputWritePointer{0, 0};
93 // one read pointer per channel
94 std::vector<int> m_hopCounter{0, 0};
95
96 // circular output buffer, collects the output for overlap-add
98 std::vector<std::vector<float>> m_outputBuffer;
99 // one write pointer per channel
100 std::vector<int> m_outputWritePointer;
101 // one read pointer per channel
102 std::vector<int> m_outputReadPointer{0, 0};
103
104 // Used for Time Streching and Pitch calculation
105 std::vector<std::vector<float>> m_previousPhasesInput;
106 std::vector<std::vector<float>> m_previousPhasesOutput;
107 std::vector<std::vector<float>> m_magnitudesSynthesis;
108 std::vector<std::vector<float>> m_magnitudesAnalysis;
109 std::vector<std::vector<float>> m_binFrequenciesAnalysis;
110 std::vector<std::vector<float>> m_binFrequenciesSynthesis;
112 float m_maxBinValue{0.0f};
114 float m_pitchShiftRatio{1.0f}; // for pitch shift
115 float m_timeStretchRatio{1.0f}; // for time streching (>1 = expansion, <1 = compression)
116
117 const int NUM_CHANNELS_MAX{2};
118 // used in Robotizer window size recalculation - maintain COLA
119 const int m_overlapFactor = 4;
121
122 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(PhaseVocoder)
123 };
124} // namespace krotos
Definition PhaseVocoder.h:16
const int m_overlapFactor
Definition PhaseVocoder.h:119
int m_inputBufferSize
Definition PhaseVocoder.h:89
int m_hopSizeSynthesis
Definition PhaseVocoder.h:76
PhaseVocoder(int fftSize, int hopSize, int inputBufferSize, WindowType windowFunction)
Definition PhaseVocoder.cpp:3
void processFrame(std::vector< float > &inBuffer, int inPointer, std::vector< float > &outBuffer, int outPointer)
Definition PhaseVocoder.cpp:133
std::vector< float > m_analysisWindow
Definition PhaseVocoder.h:83
float process(float inputSample, int channelToUse)
Definition PhaseVocoder.cpp:92
std::vector< std::vector< float > > m_magnitudesSynthesis
Definition PhaseVocoder.h:107
float wrapToPi(float phaseIn)
Definition PhaseVocoder.cpp:436
std::vector< std::vector< float > > m_previousPhasesInput
Definition PhaseVocoder.h:105
std::vector< int > m_outputWritePointer
Definition PhaseVocoder.h:100
std::vector< float > m_synthesisWindow
Definition PhaseVocoder.h:84
int m_numChannel
Definition PhaseVocoder.h:120
void setNumChannels(int newValue)
Definition PhaseVocoder.cpp:30
PhaseVocoderMode
Definition PhaseVocoder.h:21
@ NUM_VOCMODES
Definition PhaseVocoder.h:26
@ Robotizer
Definition PhaseVocoder.h:22
@ PitchShifter
Definition PhaseVocoder.h:24
@ TimeStrecher
Definition PhaseVocoder.h:25
void robotize(std::vector< float > &fftData)
Definition PhaseVocoder.cpp:264
float m_pitchShiftRatio
Definition PhaseVocoder.h:114
float m_frequencyDetected
Definition PhaseVocoder.h:113
void pitchShift(std::vector< float > &fftData)
Definition PhaseVocoder.cpp:300
const int NUM_CHANNELS_MAX
Definition PhaseVocoder.h:117
std::vector< std::vector< float > > m_previousPhasesOutput
Definition PhaseVocoder.h:106
std::vector< std::vector< float > > m_magnitudesAnalysis
Definition PhaseVocoder.h:108
void setSampleRate(float sampleRate)
Definition PhaseVocoder.h:43
std::vector< int > m_outputReadPointer
Definition PhaseVocoder.h:102
std::vector< std::vector< float > > m_outputBuffer
Definition PhaseVocoder.h:98
void detectFrequency(std::vector< float > &fftData)
Definition PhaseVocoder.cpp:200
int m_fftSize
Definition PhaseVocoder.h:73
std::vector< int > m_inputWritePointer
Definition PhaseVocoder.h:92
std::vector< std::vector< float > > m_binFrequenciesSynthesis
Definition PhaseVocoder.h:110
int m_outputBufferSize
Definition PhaseVocoder.h:97
void setGeneralParam(float paramVaue)
Definition PhaseVocoder.cpp:52
float m_maxBinValue
Definition PhaseVocoder.h:112
int m_hopSizeAnalysis
Definition PhaseVocoder.h:75
int m_maxBinIndex
Definition PhaseVocoder.h:111
float m_timeStretchRatio
Definition PhaseVocoder.h:115
void setWindowFunction(WindowType windowType)
Definition PhaseVocoder.cpp:23
void setMode(PhaseVocoderMode newMode)
Definition PhaseVocoder.h:41
float m_windowGainCorrection
Definition PhaseVocoder.h:86
PhaseVocoderMode m_mode
Definition PhaseVocoder.h:71
dsp::FFT m_fft
Definition PhaseVocoder.h:81
float m_sampleRate
Definition PhaseVocoder.h:78
std::vector< int > m_hopCounter
Definition PhaseVocoder.h:94
void timeStrech(std::vector< float > &fftData)
Definition PhaseVocoder.cpp:400
WindowType m_windowType
Definition PhaseVocoder.h:85
float caclulateFrameRMS(std::vector< float > inputFrame)
Definition PhaseVocoder.cpp:449
std::vector< std::vector< float > > m_binFrequenciesAnalysis
Definition PhaseVocoder.h:109
std::vector< std::vector< float > > m_inputBuffer
Definition PhaseVocoder.h:90
Definition AirAbsorptionFilter.cpp:2
WindowType
Definition WindowFunctions.h:6