Krotos Modules 3
Loading...
Searching...
No Matches
krotos::PhaseVocoder Class Reference

#include <PhaseVocoder.h>

Public Types

enum  PhaseVocoderMode { Robotizer = 0 , PitchShifter , TimeStrecher , NUM_VOCMODES }
 

Public Member Functions

 PhaseVocoder (int fftSize, int hopSize, int inputBufferSize, WindowType windowFunction)
 
 ~PhaseVocoder ()=default
 
float process (float inputSample, int channelToUse)
 
void setWindowFunction (WindowType windowType)
 
void setGeneralParam (float paramVaue)
 
void setMode (PhaseVocoderMode newMode)
 
void setSampleRate (float sampleRate)
 

Private Member Functions

void processFrame (std::vector< float > &inBuffer, int inPointer, std::vector< float > &outBuffer, int outPointer)
 
void robotize (std::vector< float > &fftData)
 
void pitchShift (std::vector< float > &fftData)
 
void timeStrech (std::vector< float > &fftData)
 
void detectFrequency (std::vector< float > &fftData)
 
void setNumChannels (int newValue)
 
float wrapToPi (float phaseIn)
 
float caclulateFrameRMS (std::vector< float > inputFrame)
 

Private Attributes

PhaseVocoderMode m_mode
 
int m_fftSize
 
int m_hopSizeAnalysis
 
int m_hopSizeSynthesis
 
float m_sampleRate {0.0f}
 
dsp::FFT m_fft
 
std::vector< float > m_analysisWindow
 
std::vector< float > m_synthesisWindow
 
WindowType m_windowType
 
float m_windowGainCorrection
 
int m_inputBufferSize
 
std::vector< std::vector< float > > m_inputBuffer
 
std::vector< int > m_inputWritePointer {0, 0}
 
std::vector< int > m_hopCounter {0, 0}
 
int m_outputBufferSize
 
std::vector< std::vector< float > > m_outputBuffer
 
std::vector< int > m_outputWritePointer
 
std::vector< int > m_outputReadPointer {0, 0}
 
std::vector< std::vector< float > > m_previousPhasesInput
 
std::vector< std::vector< float > > m_previousPhasesOutput
 
std::vector< std::vector< float > > m_magnitudesSynthesis
 
std::vector< std::vector< float > > m_magnitudesAnalysis
 
std::vector< std::vector< float > > m_binFrequenciesAnalysis
 
std::vector< std::vector< float > > m_binFrequenciesSynthesis
 
int m_maxBinIndex {0}
 
float m_maxBinValue {0.0f}
 
float m_frequencyDetected {0.0f}
 
float m_pitchShiftRatio {1.0f}
 
float m_timeStretchRatio {1.0f}
 
const int NUM_CHANNELS_MAX {2}
 
const int m_overlapFactor = 4
 
int m_numChannel
 

Member Enumeration Documentation

◆ PhaseVocoderMode

Determines the type of processing that is going to be applied to the fftData.

Enumerator
Robotizer 
PitchShifter 
TimeStrecher 
NUM_VOCMODES 

Constructor & Destructor Documentation

◆ PhaseVocoder()

krotos::PhaseVocoder::PhaseVocoder ( int fftSize,
int hopSize,
int inputBufferSize,
WindowType windowFunction )

Constructs a PhaseVocoder object.

◆ ~PhaseVocoder()

krotos::PhaseVocoder::~PhaseVocoder ( )
default

Member Function Documentation

◆ caclulateFrameRMS()

float krotos::PhaseVocoder::caclulateFrameRMS ( std::vector< float > inputFrame)
private

◆ detectFrequency()

void krotos::PhaseVocoder::detectFrequency ( std::vector< float > & fftData)
private

Detects frequency of signal. Not used atm.

◆ pitchShift()

void krotos::PhaseVocoder::pitchShift ( std::vector< float > & fftData)
private

Pitch shifts without changing playback speed.

◆ process()

float krotos::PhaseVocoder::process ( float inputSample,
int channelToUse )

◆ processFrame()

void krotos::PhaseVocoder::processFrame ( std::vector< float > & inBuffer,
int inPointer,
std::vector< float > & outBuffer,
int outPointer )
private

General function that starts the processing to each frame. Calls subfunctions that operate on the spectral data.

◆ robotize()

void krotos::PhaseVocoder::robotize ( std::vector< float > & fftData)
private

Applies robotization effect. Sets phase of input spectrum to 0.

◆ setGeneralParam()

void krotos::PhaseVocoder::setGeneralParam ( float paramVaue)

◆ setMode()

void krotos::PhaseVocoder::setMode ( PhaseVocoderMode newMode)
inline

◆ setNumChannels()

void krotos::PhaseVocoder::setNumChannels ( int newValue)
private

Sets number of channels. Currently hardcoded to stereo.

◆ setSampleRate()

void krotos::PhaseVocoder::setSampleRate ( float sampleRate)
inline

◆ setWindowFunction()

void krotos::PhaseVocoder::setWindowFunction ( WindowType windowType)

Public functions to set PhaseVocoder parameters.

◆ timeStrech()

void krotos::PhaseVocoder::timeStrech ( std::vector< float > & fftData)
private

High quality time streching without affecting pitch.

◆ wrapToPi()

float krotos::PhaseVocoder::wrapToPi ( float phaseIn)
private

Principal phase argument function.

Member Data Documentation

◆ m_analysisWindow

std::vector<float> krotos::PhaseVocoder::m_analysisWindow
private

◆ m_binFrequenciesAnalysis

std::vector<std::vector<float> > krotos::PhaseVocoder::m_binFrequenciesAnalysis
private

◆ m_binFrequenciesSynthesis

std::vector<std::vector<float> > krotos::PhaseVocoder::m_binFrequenciesSynthesis
private

◆ m_fft

dsp::FFT krotos::PhaseVocoder::m_fft
private

◆ m_fftSize

int krotos::PhaseVocoder::m_fftSize
private

◆ m_frequencyDetected

float krotos::PhaseVocoder::m_frequencyDetected {0.0f}
private

◆ m_hopCounter

std::vector<int> krotos::PhaseVocoder::m_hopCounter {0, 0}
private

◆ m_hopSizeAnalysis

int krotos::PhaseVocoder::m_hopSizeAnalysis
private

◆ m_hopSizeSynthesis

int krotos::PhaseVocoder::m_hopSizeSynthesis
private

◆ m_inputBuffer

std::vector<std::vector<float> > krotos::PhaseVocoder::m_inputBuffer
private

◆ m_inputBufferSize

int krotos::PhaseVocoder::m_inputBufferSize
private

◆ m_inputWritePointer

std::vector<int> krotos::PhaseVocoder::m_inputWritePointer {0, 0}
private

◆ m_magnitudesAnalysis

std::vector<std::vector<float> > krotos::PhaseVocoder::m_magnitudesAnalysis
private

◆ m_magnitudesSynthesis

std::vector<std::vector<float> > krotos::PhaseVocoder::m_magnitudesSynthesis
private

◆ m_maxBinIndex

int krotos::PhaseVocoder::m_maxBinIndex {0}
private

◆ m_maxBinValue

float krotos::PhaseVocoder::m_maxBinValue {0.0f}
private

◆ m_mode

PhaseVocoderMode krotos::PhaseVocoder::m_mode
private

◆ m_numChannel

int krotos::PhaseVocoder::m_numChannel
private

◆ m_outputBuffer

std::vector<std::vector<float> > krotos::PhaseVocoder::m_outputBuffer
private

◆ m_outputBufferSize

int krotos::PhaseVocoder::m_outputBufferSize
private

◆ m_outputReadPointer

std::vector<int> krotos::PhaseVocoder::m_outputReadPointer {0, 0}
private

◆ m_outputWritePointer

std::vector<int> krotos::PhaseVocoder::m_outputWritePointer
private

◆ m_overlapFactor

const int krotos::PhaseVocoder::m_overlapFactor = 4
private

◆ m_pitchShiftRatio

float krotos::PhaseVocoder::m_pitchShiftRatio {1.0f}
private

◆ m_previousPhasesInput

std::vector<std::vector<float> > krotos::PhaseVocoder::m_previousPhasesInput
private

◆ m_previousPhasesOutput

std::vector<std::vector<float> > krotos::PhaseVocoder::m_previousPhasesOutput
private

◆ m_sampleRate

float krotos::PhaseVocoder::m_sampleRate {0.0f}
private

◆ m_synthesisWindow

std::vector<float> krotos::PhaseVocoder::m_synthesisWindow
private

◆ m_timeStretchRatio

float krotos::PhaseVocoder::m_timeStretchRatio {1.0f}
private

◆ m_windowGainCorrection

float krotos::PhaseVocoder::m_windowGainCorrection
private

◆ m_windowType

WindowType krotos::PhaseVocoder::m_windowType
private

◆ NUM_CHANNELS_MAX

const int krotos::PhaseVocoder::NUM_CHANNELS_MAX {2}
private

The documentation for this class was generated from the following files: