X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fpitch.hh;h=d7b36c2eb65a912bde8adf08ff823c8f118e96a9;hb=e8a9ef10aa3bfc2db7689aa58631aabb4095cd16;hp=f5cfa19ed08cee9e9abffacc7421479de8ac56e3;hpb=0d4a3f8b85484d352a128ace42efd297dbb1bc37;p=lilypond.git diff --git a/lily/include/pitch.hh b/lily/include/pitch.hh index f5cfa19ed0..d7b36c2eb6 100644 --- a/lily/include/pitch.hh +++ b/lily/include/pitch.hh @@ -1,83 +1,110 @@ -/* - pitch.hh -- declare Pitch - - source file of the GNU LilyPond music typesetter - - (c) 1998--2000 Han-Wen Nienhuys - - */ - -#ifndef MUSICAL_PITCH_HH -#define MUSICAL_PITCH_HH +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 1998--2012 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 PITCH_HH +#define PITCH_HH #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 + integer number of semitones. -/** A "tonal" pitch. This is a pitch as it figures in diatonal western - music (12 semitones in an octave), as opposed to a frequence in Hz - or a integer number of semitones. - + Pitch is lexicographically ordered by (octave, notename, alteration). */ + class Pitch { -public: // fixme - /* - TODO: use SCM -- (make private?) - */ - - /// 0 is c, 6 is b - int notename_i_; - - /// 0 natural, 1 sharp, etc - int alteration_i_; - - /// 0 is central c - int octave_i_; - /* - mutators, so JUNKME. - */ +private: + int octave_; + int notename_; + Rational alteration_; + Scale *scale_; + void transpose (Pitch); void up_to (int); void down_to (int); + void normalize_octave (); + void normalize_alteration (); + void normalize (); public: + int get_octave () const; + int get_notename () const; + Rational get_alteration () const; - int octave_i () const; - int notename_i () const; - int alteration_i () const; - - /* - Pitch is lexicographically ordered by (octave, notename, - alteration). - */ - Pitch (int octave, int notename,int accidental); + Pitch (int octave, int notename, Rational accidental); + Pitch (int octave, int notename); Pitch (); - Pitch to_relative_octave (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 - int steps() const; - /// return pitch from central c (in halfnotes) - int semitone_pitch() const; - String str () const; + Pitch normalized () const; - static SCM transpose (SCM p, SCM delta); - - SCM smobbed_copy () const; - DECLARE_SCHEME_CALLBACK(less_p, (SCM a, SCM b)); - DECLARE_SIMPLE_SMOBS(Pitch,); + static int compare (Pitch const &, Pitch const &); + int steps () 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); }; -Pitch* unsmob_pitch (SCM); +enum +{ + DOUBLE_FLAT = -4, + THREE_Q_FLAT, + FLAT, + SEMI_FLAT, + NATURAL, + SEMI_SHARP, + SHARP, + THREE_Q_SHARP, + DOUBLE_SHARP, +}; -#include "compare.hh" -INSTANTIATE_COMPARE(Pitch, Pitch::compare); +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; -int compare (Array*, Array*); +SCM ly_pitch_diff (SCM pitch, SCM root); +SCM ly_pitch_transpose (SCM p, SCM delta); +DECLARE_UNSMOB (Pitch, pitch); -#endif /* MUSICAL_PITCH_HH */ +INSTANTIATE_COMPARE (Pitch, Pitch::compare); +extern SCM pitch_less_proc; +Pitch pitch_interval (Pitch const &from, Pitch const &to); +extern SCM Pitch_type_p_proc; +#endif /* PITCH_HH */