BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

pitch.hpp (1097B)


      1 #pragma once
      2 
      3 namespace bogaudio {
      4 namespace dsp {
      5 
      6 const float referenceFrequency = 261.626; // C4; frequency at which Rack 1v/octave CVs are zero.
      7 const float referenceSemitone = 60.0; // C4; value of C4 in semitones is arbitrary here, so have it match midi note numbers when rounded to integer.
      8 const float twelfthRootTwo = 1.0594630943592953;
      9 const float logTwelfthRootTwo = logf(1.0594630943592953);
     10 
     11 inline float frequencyToSemitone(float frequency) {
     12 	return logf(frequency / referenceFrequency) / logTwelfthRootTwo + referenceSemitone;
     13 }
     14 
     15 inline float semitoneToFrequency(float semitone) {
     16 	return powf(twelfthRootTwo, semitone - referenceSemitone) * referenceFrequency;
     17 }
     18 
     19 inline float frequencyToCV(float frequency) {
     20 	return log2f(frequency / referenceFrequency);
     21 }
     22 
     23 inline float cvToFrequency(float cv) {
     24 	return powf(2.0, cv) * referenceFrequency;
     25 }
     26 
     27 inline float cvToSemitone(float cv) {
     28 	return frequencyToSemitone(cvToFrequency(cv));
     29 }
     30 
     31 inline float semitoneToCV(float semitone) {
     32 	return frequencyToCV(semitoneToFrequency(semitone));
     33 }
     34 
     35 } // namespace dsp
     36 } // namespace bogaudio