X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Finclude%2Fpitch.hh;h=e711fc0d579b138b91355414bf3b91d3e8134d4c;hb=45dbb4db1979bd4bd531e0d66690fb8d3144f473;hp=ff03ec2826a7dd8fe0f985251f57fea7c6073078;hpb=1036b837e5c947284f1b64029b912793edab3dad;p=lilypond.git diff --git a/lily/include/pitch.hh b/lily/include/pitch.hh index ff03ec2826..e711fc0d57 100644 --- a/lily/include/pitch.hh +++ b/lily/include/pitch.hh @@ -1,88 +1,96 @@ -/* +/* pitch.hh -- declare Pitch - + source file of the GNU LilyPond music typesetter - - (c) 1998--2002 Han-Wen Nienhuys - - */ + + (c) 1998--2007 Han-Wen Nienhuys +*/ #ifndef MUSICAL_PITCH_HH #define MUSICAL_PITCH_HH #include "lily-proto.hh" #include "smobs.hh" +#include "rational.hh" -/** A "tonal" pitch. This is a pitch used in diatonal western - music (12 semitones in an octave), as opposed to a frequency in Hz - or a integer number of semitones. - Pitch is lexicographically ordered by (octave, notename, - alteration). - +/** 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 + integer number of semitones. - TODO: + Pitch is lexicographically ordered by (octave, notename, + alteration). - - add indeterminate octaves, so it can be used as a key in keySigature - - - abstract out the representation of alteration_, so we can - put micropitches (quartertones, etc.) in the Pitch object */ class Pitch { -private: // fixme - /* - TODO: use SCM - */ - - /// 0 is c, 6 is b +private: + int octave_; int notename_; - - /// 0 natural, 1 sharp, etc - int alteration_; + Rational alteration_; + Scale *scale_; - /// 0 is central c - int octave_; - void transpose (Pitch); void up_to (int); void down_to (int); - void normalise (); + 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; Pitch to_relative_octave (Pitch) const; - static int compare (Pitch const&,Pitch const&); - /// return large part of interval from central c + static int compare (Pitch const &, Pitch const &); + int steps () const; - /// return pitch from central c (in halfnotes) - int semitone_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; - SCM smobbed_copy () 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, }; +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); -DECLARE_UNSMOB(Pitch,pitch); +DECLARE_UNSMOB (Pitch, pitch); -#include "compare.hh" INSTANTIATE_COMPARE (Pitch, Pitch::compare); -int compare (Array*, Array*); extern SCM pitch_less_proc; -Pitch interval (Pitch const & from , Pitch const & to ); +Pitch pitch_interval (Pitch const &from, Pitch const &to); #endif /* MUSICAL_PITCH_HH */ -