mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-02 16:49:41 +02:00
63 lines
2.2 KiB
C++
63 lines
2.2 KiB
C++
/**********************************************************************
|
|
|
|
Audacity: A Digital Audio Editor
|
|
Audacity(R) is copyright (c) 1999-2013 Audacity Team.
|
|
License: GPL v2. See License.txt.
|
|
|
|
PitchName.h
|
|
Vaughan Johnson, Dominic Mazzoni
|
|
|
|
******************************************************************//**
|
|
|
|
utilities for converting among frequency, MIDI note number,
|
|
pitch index, pitch name
|
|
|
|
*//*******************************************************************/
|
|
|
|
|
|
#ifndef __AUDACITY_PITCHNAME__
|
|
#define __AUDACITY_PITCHNAME__
|
|
|
|
class wxString;
|
|
|
|
// FreqToMIDInote takes a frequency in Hz (exponential scale relative to
|
|
// alphabetic pitch names) and returns a pitch ID number (linear
|
|
// scale), such that A440 (A4) is 69, middle C (C4) is 60, etc.
|
|
// Each register starts with C (e.g., for middle C and A440,
|
|
// it's register 4).
|
|
// MIDI note number 0 is C-1 in Scientific pitch notation.
|
|
double FreqToMIDInote(const double freq);
|
|
|
|
double MIDInoteToFreq(const double dMIDInote);
|
|
|
|
// PitchIndex returns the [0,11] index for a double MIDI note number,
|
|
// per result from FreqToMIDInote, corresponding to modulo 12
|
|
// of the integer part of (dMIDInote + 0.5), so 0=C, 1=C#, etc.
|
|
unsigned int PitchIndex(const double dMIDInote);
|
|
|
|
// PitchOctave returns the octave index for a double dMIDInote note number,
|
|
// per result from FreqToMIDInote.
|
|
// MIDI note number 0 is C-1 in Scientific pitch notation.
|
|
int PitchOctave(const double dMIDInote);
|
|
|
|
enum class PitchNameChoice { Sharps, Flats, Both };
|
|
|
|
// PitchName takes dMIDInote (per result from
|
|
// FreqToMIDInote) and returns a standard pitch/note name [C, C#, etc.).
|
|
wxString PitchName(
|
|
const double dMIDInote,
|
|
const PitchNameChoice choice = PitchNameChoice::Sharps );
|
|
|
|
// PitchName_Absolute does the same thing as PitchName, but appends
|
|
// the octave number, e.g., instead of "C" it will return "C4"
|
|
// if the dMIDInote corresonds to middle C, i.e., is 60.
|
|
wxString PitchName_Absolute(
|
|
const double dMIDInote,
|
|
const PitchNameChoice choice = PitchNameChoice::Sharps);
|
|
|
|
double PitchToMIDInote(const unsigned int nPitchIndex, const int nPitchOctave);
|
|
|
|
double PitchToFreq(const unsigned int nPitchIndex, const int nPitchOctave);
|
|
|
|
#endif // __AUDACITY_PITCHNAME__
|