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() {
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;
if (index < 0)
index += BUFFER_SIZE;
@ -148,8 +181,17 @@ int Shifter::GetPeakIndex() {
{
//float val = fabs(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)
{
max_index = index;
max_value = val;
}
@ -158,7 +200,8 @@ int Shifter::GetPeakIndex() {
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;
float freeze_period;
float freeze_volume = 1;
int last_max_index = 0;
MidiPitchSmoother out_midi_smoother;
};
#endif