X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fpitch.hh;h=42a76522f4ae5948cf2aad97b0b65f850cdd79bd;hb=8cab78caa0db1ba14f2e52e4c1ddbb541ea0e5cb;hp=56617d9e611d8a3b906324dd2e2535be7b2c853e;hpb=75eebcb49e52d296b1da3e1074e0825d2c780db4;p=lilypond.git diff --git a/lily/include/pitch.hh b/lily/include/pitch.hh index 56617d9e61..42a76522f4 100644 --- a/lily/include/pitch.hh +++ b/lily/include/pitch.hh @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1998--2006 Han-Wen Nienhuys + (c) 1998--2009 Han-Wen Nienhuys */ #ifndef MUSICAL_PITCH_HH @@ -11,6 +11,8 @@ #include "lily-proto.hh" #include "smobs.hh" +#include "rational.hh" + /** A "tonal" pitch. This is a pitch used in diatonal western music (24 quartertones in an octave), as opposed to a frequency in Hz or a @@ -19,34 +21,29 @@ Pitch is lexicographically ordered by (octave, notename, alteration). - - TODO: - - - add indeterminate octaves, so it can be used as a key in keySigature */ class Pitch { -private: // fixme - /* - TODO: use SCM - */ - - int notename_; - int alteration_; +private: int octave_; + int notename_; + Rational alteration_; + Scale *scale_; void transpose (Pitch); void up_to (int); void down_to (int); - void normalise (); + void normalize_octave (); + void normalize_alteration (); + void normalize (); public: - int get_octave () const; int get_notename () const; - int get_alteration () const; + Rational get_alteration () const; - Pitch (int octave, int notename, int accidental); + Pitch (int octave, int notename, Rational accidental); + Pitch (int octave, int notename); Pitch (); Pitch transposed (Pitch) const; @@ -55,26 +52,38 @@ public: static int compare (Pitch const &, Pitch const &); int steps () const; - int semitone_pitch () const; - int quartertone_pitch () const; - String to_string () const; + Rational tone_pitch () const; + int rounded_semitone_pitch () const; + int rounded_quartertone_pitch () const; + Pitch negated () const; + string to_string () const; DECLARE_SCHEME_CALLBACK (less_p, (SCM a, SCM b)); - DECLARE_SIMPLE_SMOBS (Pitch,); + DECLARE_SIMPLE_SMOBS (Pitch); +}; + + +enum { + DOUBLE_FLAT = -4, + THREE_Q_FLAT, + FLAT, + SEMI_FLAT, + NATURAL, + SEMI_SHARP, + SHARP, + THREE_Q_SHARP, + DOUBLE_SHARP, }; -enum - { - DOUBLE_FLAT = -4, - THREE_Q_FLAT, - FLAT, - SEMI_FLAT, - NATURAL, - SEMI_SHARP, - SHARP, - THREE_Q_SHARP, - DOUBLE_SHARP, - }; +extern Rational DOUBLE_FLAT_ALTERATION; +extern Rational THREE_Q_FLAT_ALTERATION; +extern Rational FLAT_ALTERATION; +extern Rational SEMI_FLAT_ALTERATION; +extern Rational NATURAL_ALTERATION; +extern Rational SEMI_SHARP_ALTERATION; +extern Rational SHARP_ALTERATION; +extern Rational THREE_Q_SHARP_ALTERATION; +extern Rational DOUBLE_SHARP_ALTERATION; SCM ly_pitch_diff (SCM pitch, SCM root); SCM ly_pitch_transpose (SCM p, SCM delta); @@ -82,7 +91,6 @@ DECLARE_UNSMOB (Pitch, pitch); INSTANTIATE_COMPARE (Pitch, Pitch::compare); -int compare (Array *, Array *); extern SCM pitch_less_proc; Pitch pitch_interval (Pitch const &from, Pitch const &to);