weak pull to real pitch markers, don't care otherwise
This commit is contained in:
michalcourson
2025-12-04 18:02:24 -05:00
parent 34f565a96c
commit 31e5b1370a
2 changed files with 45 additions and 1 deletions

View File

@ -137,6 +137,39 @@ float Shifter::GetOutputEnvelopePeriodFreeze(int freeze_voice) {
} }
int Shifter::GetPeakIndex() { int Shifter::GetPeakIndex() {
static float current_index = 0;
float smooth = 1 / 200.0f;
int diff = in_playhead - current_index;
if (diff < 0)
diff += BUFFER_SIZE;
if (diff < in_period * 2) {
diff = last_max_index - current_index;
if (diff < -(BUFFER_SIZE / 2))
diff += BUFFER_SIZE;
if (diff > BUFFER_SIZE / 2)
diff -= BUFFER_SIZE;
float adjust = (float)diff * smooth;
if (adjust > 1 || adjust < -1) {
int dummy = 0;
}
current_index += adjust;
if ((int)current_index > BUFFER_SIZE) {
current_index -= BUFFER_SIZE;
}
if((int)current_index < 0) {
current_index += BUFFER_SIZE;
}
return (int)current_index;
}
else {
current_index += in_period;
if (current_index > BUFFER_SIZE) {
current_index -= BUFFER_SIZE;
}
}
float threshold = .0075f;
int index = in_playhead - in_period * 2; int index = in_playhead - in_period * 2;
if (index < 0) if (index < 0)
index += BUFFER_SIZE; index += BUFFER_SIZE;
@ -148,8 +181,17 @@ int Shifter::GetPeakIndex() {
{ {
//float val = fabs(in_buffer[index]); //float val = fabs(in_buffer[index]);
float val = in_buffer[index]; float val = in_buffer[index];
int period_difference = index - last_max_index;
if (period_difference < 0)
period_difference += BUFFER_SIZE;
//prefer peaks near last peak or near next peak
/*if(!((period_difference > in_period * (0-threshold) && period_difference < in_period* (0+threshold)) || (period_difference > in_period * (1-threshold) && period_difference < in_period * (1+threshold)))) {
val *= 0.75f;
}*/
if (val > max_value) if (val > max_value)
{ {
max_index = index; max_index = index;
max_value = val; max_value = val;
} }
@ -158,7 +200,8 @@ int Shifter::GetPeakIndex() {
index -= BUFFER_SIZE; index -= BUFFER_SIZE;
} }
} }
return max_index; last_max_index = max_index;
return (int)current_index;
} }

View File

@ -235,6 +235,7 @@ private:
bool enable_autotune = false; bool enable_autotune = false;
float freeze_period; float freeze_period;
float freeze_volume = 1; float freeze_volume = 1;
int last_max_index = 0;
MidiPitchSmoother out_midi_smoother; MidiPitchSmoother out_midi_smoother;
}; };
#endif #endif