Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save leafac/56a2288008862a3c93442c341f3de8cf to your computer and use it in GitHub Desktop.

Select an option

Save leafac/56a2288008862a3c93442c341f3de8cf to your computer and use it in GitHub Desktop.
slider1:frequency=0<20,20000,1>Frequency
@init
zero_crossing_state = 0;
period.samples = 0;
sample.previous = 0;
@sample
sample = spl0;
period.samples += 1;
sign(sample) != sign(sample.previous) ? (
zero_crossing_state += 1;
zero_crossing_state == 2 ? (
period.samples -= 1;
period.samples += (abs(sample) - abs(sample.previous) + 1) / 2;
frequency = srate / period.samples;
zero_crossing_state = 0;
period.samples -= floor(period.samples);
);
);
sample.previous = sample;
slider1:threshold.db=-40<-80,+6,0.1>Threshold (dB)
slider3:frequency=0<20,20000,1>Frequency (Hz)
slider4:midi_note=0<0,127,1>MIDI Note
@init
window.length.ms = 100;
window.length.samples = window.length.ms * srate / 1000;
// window.length.samples = 2048;
zero_crossings.count = 0;
zero_crossings.circular_buffer = 0;
zero_crossings.circular_buffer.index = 0;
sample.previous = 0;
zero_crossings.allowed = 0;
@slider
threshold.linear = 10^(threshold.db / 20);
@sample
sample = spl0;
zero_crossings.count -= zero_crossings.circular_buffer[zero_crossings.circular_buffer.index];
abs(sample) > threshold.linear ? zero_crossings.allowed = 1;
zero_crossings.allowed && sign(sample) != sign(sample.previous) ? (
zero_crossings.allowed = 0;
zero_crossings.circular_buffer[zero_crossings.circular_buffer.index] = 1;
zero_crossings.count += 1;
) : (
zero_crossings.circular_buffer[zero_crossings.circular_buffer.index] = 0;
);
frequency = (zero_crossings.count / 2) / window.length.ms * 1000;
midi_note = 12 * log(frequency/440) / log(2) + 69;
zero_crossings.circular_buffer.index += 1;
zero_crossings.circular_buffer.index == window.length.samples ? zero_crossings.circular_buffer.index = 0;
sample.previous = sample;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment