OpenWareLaboratory
VoltsPerOctave.h
Go to the documentation of this file.
1 #ifndef __VoltsPerOctave_hpp__
2 #define __VoltsPerOctave_hpp__
3 
4 #include "FloatArray.h"
5 #include "basicmaths.h"
6 
7 /*
8  * Converts samples into volts and frequencies, following 1V/octave tuning.
9  * Tuned to 440Hz. Change base note with setTune(float octave).
10  */
12 private:
13  float tune;
14 public:
15  float offset;
16  float multiplier;
17  VoltsPerOctave(bool input = true);
18  VoltsPerOctave(float offset, float multiplier);
19  // Tune the frequency converter to octaves up or down.
20  // For semitones divide by 12. For cents divide by 1200.
21  void setTune(float octaves){
22  tune = octaves;
23  }
24  void setMidiNote(float note){
25  tune = (note-69)/12.0f; // 440Hz == A4 == MIDI Note 69
26  }
27  float getFrequency(float sample){
28  return voltsToHertz(sampleToVolts(sample) + tune);
29  }
30  float getSample(float frequency){
31  return voltsToSample(hertzToVolts(frequency) + tune);
32  }
33  float sampleToVolts(float sample){
34  return (sample-offset) * multiplier;
35  }
36  static float voltsToHertz(float volts){
37  return 440.f * exp2f(volts);
38  }
39  static float hertzToNote(float freq){
40  return 12 * log2f(freq/440.f) + 69;
41  }
42  static float noteToHertz(float note){
43  return 440.0f * exp2f((note - 69) / 12);
44  }
45  float voltsToSample(float volts){
46  return volts / multiplier + offset;
47  }
48  static float hertzToVolts(float hertz){
49  return log2f(hertz/440.0f);
50  }
51  void getFrequency(FloatArray samples, FloatArray output);
52  void getFrequency(FloatArray samples);
53  void getSample(FloatArray frequencies, FloatArray output);
54  void getSample(FloatArray frequencies);
55 };
56 
57 #endif /* __VoltsPerOctave_hpp__ */
This class contains useful methods for manipulating arrays of floats.
Definition: FloatArray.h:12
static float noteToHertz(float note)
float getSample(float frequency)
void setMidiNote(float note)
float voltsToSample(float volts)
static float voltsToHertz(float volts)
void setTune(float octaves)
VoltsPerOctave(bool input=true)
float sampleToVolts(float sample)
static float hertzToNote(float freq)
float getFrequency(float sample)
static float hertzToVolts(float hertz)