|
@@ -38,34 +38,22 @@ class SMBPitchShift {
|
|
|
MAX_FRAME_LENGTH = 8192
|
|
|
};
|
|
|
|
|
|
- float gInFIFO[MAX_FRAME_LENGTH];
|
|
|
- float gOutFIFO[MAX_FRAME_LENGTH];
|
|
|
- float gFFTworksp[2 * MAX_FRAME_LENGTH];
|
|
|
- float gLastPhase[MAX_FRAME_LENGTH / 2 + 1];
|
|
|
- float gSumPhase[MAX_FRAME_LENGTH / 2 + 1];
|
|
|
- float gOutputAccum[2 * MAX_FRAME_LENGTH];
|
|
|
- float gAnaFreq[MAX_FRAME_LENGTH];
|
|
|
- float gAnaMagn[MAX_FRAME_LENGTH];
|
|
|
- float gSynFreq[MAX_FRAME_LENGTH];
|
|
|
- float gSynMagn[MAX_FRAME_LENGTH];
|
|
|
- long gRover;
|
|
|
+ float gInFIFO[MAX_FRAME_LENGTH] = {};
|
|
|
+ float gOutFIFO[MAX_FRAME_LENGTH] = {};
|
|
|
+ float gFFTworksp[2 * MAX_FRAME_LENGTH] = {};
|
|
|
+ float gLastPhase[MAX_FRAME_LENGTH / 2 + 1] = {};
|
|
|
+ float gSumPhase[MAX_FRAME_LENGTH / 2 + 1] = {};
|
|
|
+ float gOutputAccum[2 * MAX_FRAME_LENGTH] = {};
|
|
|
+ float gAnaFreq[MAX_FRAME_LENGTH] = {};
|
|
|
+ float gAnaMagn[MAX_FRAME_LENGTH] = {};
|
|
|
+ float gSynFreq[MAX_FRAME_LENGTH] = {};
|
|
|
+ float gSynMagn[MAX_FRAME_LENGTH] = {};
|
|
|
+ long gRover = 0;
|
|
|
|
|
|
void smbFft(float *fftBuffer, long fftFrameSize, long sign);
|
|
|
|
|
|
public:
|
|
|
void PitchShift(float pitchShift, long numSampsToProcess, long fftFrameSize, long osamp, float sampleRate, float *indata, float *outdata, int stride);
|
|
|
-
|
|
|
- SMBPitchShift() {
|
|
|
- gRover = 0;
|
|
|
- memset(gInFIFO, 0, MAX_FRAME_LENGTH * sizeof(float));
|
|
|
- memset(gOutFIFO, 0, MAX_FRAME_LENGTH * sizeof(float));
|
|
|
- memset(gFFTworksp, 0, 2 * MAX_FRAME_LENGTH * sizeof(float));
|
|
|
- memset(gLastPhase, 0, (MAX_FRAME_LENGTH / 2 + 1) * sizeof(float));
|
|
|
- memset(gSumPhase, 0, (MAX_FRAME_LENGTH / 2 + 1) * sizeof(float));
|
|
|
- memset(gOutputAccum, 0, 2 * MAX_FRAME_LENGTH * sizeof(float));
|
|
|
- memset(gAnaFreq, 0, MAX_FRAME_LENGTH * sizeof(float));
|
|
|
- memset(gAnaMagn, 0, MAX_FRAME_LENGTH * sizeof(float));
|
|
|
- }
|
|
|
};
|
|
|
|
|
|
class AudioEffectPitchShift;
|
|
@@ -75,7 +63,7 @@ class AudioEffectPitchShiftInstance : public AudioEffectInstance {
|
|
|
friend class AudioEffectPitchShift;
|
|
|
Ref<AudioEffectPitchShift> base;
|
|
|
|
|
|
- int fft_size;
|
|
|
+ int fft_size = 0;
|
|
|
SMBPitchShift shift_l;
|
|
|
SMBPitchShift shift_r;
|
|
|
|
|
@@ -98,12 +86,12 @@ public:
|
|
|
FFT_SIZE_MAX
|
|
|
};
|
|
|
|
|
|
- float pitch_scale;
|
|
|
- int oversampling;
|
|
|
- FFTSize fft_size;
|
|
|
- float wet;
|
|
|
- float dry;
|
|
|
- bool filter;
|
|
|
+ float pitch_scale = 1.0;
|
|
|
+ int oversampling = 4;
|
|
|
+ FFTSize fft_size = FFT_SIZE_2048;
|
|
|
+ float wet = 0.0;
|
|
|
+ float dry = 0.0;
|
|
|
+ bool filter = false;
|
|
|
|
|
|
protected:
|
|
|
static void _bind_methods();
|
|
@@ -119,8 +107,6 @@ public:
|
|
|
|
|
|
void set_fft_size(FFTSize);
|
|
|
FFTSize get_fft_size() const;
|
|
|
-
|
|
|
- AudioEffectPitchShift();
|
|
|
};
|
|
|
|
|
|
VARIANT_ENUM_CAST(AudioEffectPitchShift::FFTSize);
|