4 : m_inputBufferSize(inputBufferSize), m_outputBufferSize(inputBufferSize), m_hopSizeAnalysis(hopSize),
5 m_fft(static_cast<int>(log2f(static_cast<float>(fftSize))))
36 for (
int i = 0; i < numChannels; i++)
59 static_cast<int>(jmap<float>(paramValue, 0.f, 1.f, 64.f,
static_cast<float>(
m_fftSize)));
137 std::vector<float> unwrappedBuffer(2 *
m_fftSize);
145 unwrappedBuffer[i] = inBuffer[circBufferIndex];
159 m_fft.performRealOnlyForwardTransform(unwrappedBuffer.data());
176 m_fft.performRealOnlyInverseTransform(unwrappedBuffer.data());
188 float gain = inEnergy / (outEnergy + 1e-12f);
196 outBuffer[circBufferIndex] += unwrappedBuffer[i] * gain;
203 std::vector<float> realPart(
m_fftSize / 2 + 1);
204 std::vector<float> imagPart(
m_fftSize / 2 + 1);
208 realPart[i] = fftData[k];
209 imagPart[i] = fftData[k + 1];
217 float mag = std::sqrtf(powf(realPart[i], 2.0f) + powf(imagPart[i], 2.0f));
218 float phase = std::atan2f(imagPart[i], realPart[i]);
225 float binFreq = 2.0f * float(
M_PI) * float(i) / float(
m_fftSize);
256 fftData[k] = realPart[i];
257 fftData[k + 1] = imagPart[i];
267 std::vector<float> realPart(
m_fftSize / 2 + 1);
268 std::vector<float> imagPart(
m_fftSize / 2 + 1);
272 realPart[i] = fftData[k];
273 imagPart[i] = fftData[k + 1];
281 float mag = std::sqrtf(powf(realPart[i], 2.0f) + powf(imagPart[i], 2.0f));
286 realPart[i] = mag * std::cosf(phase);
287 imagPart[i] = mag * std::sinf(phase);
294 fftData[k] = realPart[i];
295 fftData[k + 1] = imagPart[i];
303 std::vector<float> realPart(
m_fftSize / 2 + 1);
304 std::vector<float> imagPart(
m_fftSize / 2 + 1);
308 realPart[i] = fftData[k];
309 imagPart[i] = fftData[k + 1];
317 float mag = std::sqrt(pow(realPart[i], 2.0f) + pow(imagPart[i], 2.0f));
318 float phase = std::atan2(imagPart[i], realPart[i]);
325 float binFreq = 2.0f * float(
M_PI) * float(i) / float(
m_fftSize);
376 float binCenterFreq = 2.0f * float(
M_PI) * float(i) / float(
m_fftSize);
383 realPart[i] = mag * std::cos(outPhase);
384 imagPart[i] = mag * std::sin(outPhase);
394 fftData[k] = realPart[i];
395 fftData[k + 1] = imagPart[i];
403 std::vector<float> realPart(
m_fftSize / 2 + 1);
404 std::vector<float> imagPart(
m_fftSize / 2 + 1);
408 realPart[i] = fftData[k];
409 imagPart[i] = fftData[k + 1];
417 float mag = std::sqrt(pow(realPart[i], 2.0f) + pow(imagPart[i], 2.0f));
419 float phase = std::atan2(imagPart[i], realPart[i]);
422 realPart[i] = mag * std::cos(phase);
423 imagPart[i] = mag * std::sin(phase);
430 fftData[k] = realPart[i];
431 fftData[k + 1] = imagPart[i];
438 if (phaseIn < -
float(
M_PI) || phaseIn >
float(
M_PI))
441 return fmod(phaseIn +
float(
M_PI), 2.0f *
float(
M_PI)) - float(
M_PI);
443 return fmod(phaseIn -
float(
M_PI), -2.0f *
float(
M_PI)) + float(
M_PI);
451 float sumOfSquares = 0;
453 for (
int i = 0; i < inputFrame.size(); i++)
455 sumOfSquares += inputFrame[i] * inputFrame[i];
458 float meanValue = sumOfSquares / (float)inputFrame.size();
460 float rmsValue = sqrtf(meanValue);
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
@ 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
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
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
std::vector< float > generateWindow(int sizeInSamples, WindowType windowType)
Definition WindowFunctions.cpp:12
Definition AirAbsorptionFilter.cpp:2
WindowType
Definition WindowFunctions.h:6
#define M_PI
Definition windowing.h:9