8 #ifndef __VRV_TRANSPOSE_H__
9 #define __VRV_TRANSPOSE_H__
18 #define INVALID_INTERVAL_CLASS -123456789
47 TransPitch(
int aPname,
int anAccid,
int anOct);
48 TransPitch(data_PITCHNAME pname, data_ACCIDENTAL_GESTURAL accidG, data_ACCIDENTAL_WRITTEN accidW,
int oct);
62 data_ACCIDENTAL_GESTURAL GetAccidG()
const;
63 data_ACCIDENTAL_WRITTEN GetAccidW()
const;
64 data_PITCHNAME GetPitchName()
const;
65 std::u32string GetPitchString()
const;
66 std::string GetSimplePitchString()
const;
67 bool IsValid(
int maxAccid);
68 void SetPitch(
int aPname,
int anAccid,
int anOct);
74 static int GetChromaticAlteration(data_ACCIDENTAL_GESTURAL accidG, data_ACCIDENTAL_WRITTEN accidW);
77 std::ostream &operator<<(std::ostream &out,
const TransPitch &pitch);
91 void SetMaxAccid(
int maxAccid);
100 bool SetTransposition(
int transVal);
101 bool SetTransposition(
const std::string &transString);
102 bool SetTransposition(
const TransPitch &fromPitch,
const std::string &toString);
103 bool SetTransposition(
int keyFifths,
int semitones);
104 bool SetTransposition(
int keyFifths,
const std::string &semitones);
107 int GetTranspositionIntervalClass();
108 std::string GetTranspositionIntervalName();
112 int Transpose(
int iPitch);
115 void Transpose(
TransPitch &pitch,
int transVal);
116 void Transpose(
TransPitch &pitch,
const std::string &transString);
120 std::string GetIntervalName(
int intervalClass);
121 int GetInterval(
const std::string &intervalName);
124 int TransPitchToIntegerPitch(
const TransPitch &pitch);
125 TransPitch IntegerPitchToTransPitch(
int ipitch);
129 std::string SemitonesToIntervalName(
int keyFifths,
int semitones);
130 int SemitonesToIntervalClass(
int keyFifths,
int semitones);
131 int IntervalToSemitones(
int intervalClass);
132 int IntervalToSemitones(
const std::string &intervalName);
135 int IntervalToCircleOfFifths(
const std::string &transString);
136 int IntervalToCircleOfFifths(
int transval);
137 std::string CircleOfFifthsToIntervalName(
int fifths);
138 int CircleOfFifthsToIntervalClass(
int fifths);
141 bool GetKeyTonic(
const std::string &keyTonic,
TransPitch &tonic);
142 TransPitch CircleOfFifthsToMajorTonic(
int fifths);
143 TransPitch CircleOfFifthsToMinorTonic(
int fifths);
144 TransPitch CircleOfFifthsToDorianTonic(
int fifths);
145 TransPitch CircleOfFifthsToPhrygianTonic(
int fifths);
146 TransPitch CircleOfFifthsToLydianTonic(
int fifths);
147 TransPitch CircleOfFifthsToMixolydianTonic(
int fifths);
148 TransPitch CircleOfFifthsToLocrianTonic(
int fifths);
151 std::string DiatonicChromaticToIntervalName(
int diatonic,
int chromatic);
152 int DiatonicChromaticToIntervalClass(
int diatonic,
int chromatic);
153 void IntervalToDiatonicChromatic(
int &diatonic,
int &chromatic,
int intervalClass);
154 void IntervalToDiatonicChromatic(
int &diatonic,
int &chromatic,
const std::string &intervalName);
159 int PerfectUnisonClass();
160 int MinorSecondClass();
161 int MajorSecondClass();
162 int MinorThirdClass();
163 int MajorThirdClass();
164 int PerfectFourthClass();
165 int PerfectFifthClass();
166 int MinorSixthClass();
167 int MajorSixthClass();
168 int MinorSeventhClass();
169 int MajorSeventhClass();
170 int PerfectOctaveClass();
173 int GetCPitchClass() {
return m_diatonicMapping[0]; }
174 int GetDPitchClass() {
return m_diatonicMapping[1]; }
175 int GetEPitchClass() {
return m_diatonicMapping[2]; }
176 int GetFPitchClass() {
return m_diatonicMapping[3]; }
177 int GetGPitchClass() {
return m_diatonicMapping[4]; }
178 int GetAPitchClass() {
return m_diatonicMapping[5]; }
179 int GetBPitchClass() {
return m_diatonicMapping[6]; }
186 static bool IsValidIntervalName(
const std::string &name);
187 static bool IsValidKeyTonic(
const std::string &name);
188 static bool IsValidSemitones(
const std::string &name);
201 std::vector<int> m_diatonicMapping;
204 const std::vector<int> m_diatonic2semitone{ 0, 2, 4, 5, 7, 9, 11 };
207 void CalculateDiatonicMapping();