Mercurial > hg > svcore
comparison base/Pitch.cpp @ 26:090c22aa726a
* Add the Note layer for pianoroll-type display of note-type data
* Complete the MIDI file importer (well, nearly -- it would be nice to
be able to import the non-note data as other sorts of models, and that's
not done yet).
* Minor refactoring in RealTime etc
| author | Chris Cannam |
|---|---|
| date | Fri, 10 Feb 2006 17:51:36 +0000 |
| parents | a7ed14263fe4 |
| children | 39ae3dee27b9 |
comparison
equal
deleted
inserted
replaced
| 25:7dad8a310963 | 26:090c22aa726a |
|---|---|
| 43 "C%1", "C#%1", "D%1", "D#%1", | 43 "C%1", "C#%1", "D%1", "D#%1", |
| 44 "E%1", "F%1", "F#%1", "G%1", | 44 "E%1", "F%1", "F#%1", "G%1", |
| 45 "G#%1", "A%1", "A#%1", "B%1" | 45 "G#%1", "A%1", "A#%1", "B%1" |
| 46 }; | 46 }; |
| 47 | 47 |
| 48 static QString flatNotes[] = { | |
| 49 "C%1", "Db%1", "D%1", "Eb%1", | |
| 50 "E%1", "F%1", "Gb%1", "G%1", | |
| 51 "Ab%1", "A%1", "Bb%1", "B%1" | |
| 52 }; | |
| 53 | |
| 48 QString | 54 QString |
| 49 Pitch::getPitchLabel(int midiPitch, | 55 Pitch::getPitchLabel(int midiPitch, |
| 50 float centsOffset) | 56 float centsOffset, |
| 57 bool useFlats) | |
| 51 { | 58 { |
| 52 int octave = -2; | 59 int octave = -2; |
| 53 | 60 |
| 54 if (midiPitch < 0) { | 61 if (midiPitch < 0) { |
| 55 while (midiPitch < 0) { | 62 while (midiPitch < 0) { |
| 58 } | 65 } |
| 59 } else { | 66 } else { |
| 60 octave = midiPitch / 12 - 2; | 67 octave = midiPitch / 12 - 2; |
| 61 } | 68 } |
| 62 | 69 |
| 63 QString plain = notes[midiPitch % 12].arg(octave); | 70 QString plain = (useFlats ? flatNotes : notes)[midiPitch % 12].arg(octave); |
| 64 | 71 |
| 65 int ic = lrintf(centsOffset); | 72 int ic = lrintf(centsOffset); |
| 66 if (ic == 0) return plain; | 73 if (ic == 0) return plain; |
| 67 else if (ic > 0) return QString("%1+%2c").arg(plain).arg(ic); | 74 else if (ic > 0) return QString("%1+%2c").arg(plain).arg(ic); |
| 68 else return QString("%1%2c").arg(plain).arg(ic); | 75 else return QString("%1%2c").arg(plain).arg(ic); |
| 69 } | 76 } |
| 70 | 77 |
| 71 QString | 78 QString |
| 72 Pitch::getPitchLabelForFrequency(float frequency, | 79 Pitch::getPitchLabelForFrequency(float frequency, |
| 73 float concertA) | 80 float concertA, |
| 81 bool useFlats) | |
| 74 { | 82 { |
| 75 float centsOffset = 0.0; | 83 float centsOffset = 0.0; |
| 76 int midiPitch = getPitchForFrequency(frequency, ¢sOffset, concertA); | 84 int midiPitch = getPitchForFrequency(frequency, ¢sOffset, concertA); |
| 77 return getPitchLabel(midiPitch, centsOffset); | 85 return getPitchLabel(midiPitch, centsOffset, useFlats); |
| 78 } | 86 } |
| 79 | 87 |
