27 float pitch = semitones + 128.0f;
28 int32_t integral =
static_cast<int32_t
>(pitch);
29 float fractional = pitch -
static_cast<float>(integral);
30 if (integral < 0) integral = 0;
31 if (integral > 255) integral = 255;
40 while (semitones > 120.0f) { semitones -= 120.0f; scale *= 1024.0f; }
41 while (semitones < -120.0f) { semitones += 120.0f; scale *= (1.0f / 1024.0f); }
60 return static_cast<uint32_t
>(freq / sample_rate * 4294967296.0f);
constexpr float pitch_ratio_high_256[257]
constexpr float pitch_ratio_low_256[257]
DSP atoms for audio signal processing.
float exp2_approx_safe(float x)
Extended range 2^x.
float note_to_frequency(float midi_note)
MIDI note to frequency in Hz. A4 = 440 Hz.
float note_to_ratio(float midi_note)
float semitones_to_ratio_safe(float semitones)
float semitones_to_ratio(float semitones)
float exp2_approx(float x)
Fast 2^x approximation via pitch tables. x in [-10.67, +10.58].
uint32_t note_to_phase_increment(float midi_note, float sample_rate)