X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fpitch.hh;h=e0a6b45b87906eafcad29e2c2637052e038e314a;hb=4a401ca1c60f428daa242dbdd102fdb3f327ebfb;hp=f50d2d531c69e8fe148c8ab1708c77982f5b3dab;hpb=358d6e99ada8019268ade9ba9080b2d0d88eeb7a;p=lilypond.git diff --git a/lily/include/pitch.hh b/lily/include/pitch.hh index f50d2d531c..e0a6b45b87 100644 --- a/lily/include/pitch.hh +++ b/lily/include/pitch.hh @@ -1,74 +1,73 @@ /* - pitch.hh -- declare Pitch + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2006 Han-Wen Nienhuys + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . */ -#ifndef MUSICAL_PITCH_HH -#define MUSICAL_PITCH_HH +#ifndef PITCH_HH +#define PITCH_HH #include "lily-proto.hh" #include "smobs.hh" +#include "rational.hh" -#include "std-vector.hh" - -struct Scale -{ - vector step_semitones_; - Scale (); - Scale (Scale const&); - DECLARE_SMOBS (Scale); -}; - - -/** 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. - - Pitch is lexicographically ordered by (octave, notename, - alteration). - - - TODO: +/* + 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. - - add indeterminate octaves, so it can be used as a key in keySigature + Pitch is lexicographically ordered by (octave, notename, alteration). */ + 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; Pitch to_relative_octave (Pitch) const; + Pitch normalized () const; + static int compare (Pitch const &, Pitch const &); int steps () const; - int semitone_pitch () const; - int quartertone_pitch () 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)); @@ -76,17 +75,27 @@ public: }; enum - { - DOUBLE_FLAT = -4, - THREE_Q_FLAT, - FLAT, - SEMI_FLAT, - NATURAL, - SEMI_SHARP, - SHARP, - THREE_Q_SHARP, - DOUBLE_SHARP, - }; +{ + 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); @@ -96,7 +105,6 @@ INSTANTIATE_COMPARE (Pitch, Pitch::compare); extern SCM pitch_less_proc; Pitch pitch_interval (Pitch const &from, Pitch const &to); -extern Scale *default_global_scale; - -#endif /* MUSICAL_PITCH_HH */ +extern SCM Pitch_type_p_proc; +#endif /* PITCH_HH */