X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpitch.cc;h=5dc46f97e6770f3a68b687418dc08a0d88951656;hb=2536405e9584f63d559653183971c0fec57ba037;hp=d4f9aae48f8c233b395093093ef28863790605d7;hpb=b5b00b10f242e4d22e352c8a0d61c384bf205277;p=lilypond.git diff --git a/lily/pitch.cc b/lily/pitch.cc index d4f9aae48f..5dc46f97e6 100644 --- a/lily/pitch.cc +++ b/lily/pitch.cc @@ -1,18 +1,17 @@ -/* +/* musical-pitch.cc -- implement Pitch - + source file of the GNU LilyPond music typesetter - - (c) 1998--2003 Han-Wen Nienhuys - - */ + + (c) 1998--2004 Han-Wen Nienhuys +*/ + #include "pitch.hh" #include "warn.hh" #include "main.hh" #include "ly-smobs.icc" - Pitch::Pitch (int o, int n, int a) { notename_ = n; @@ -21,6 +20,7 @@ Pitch::Pitch (int o, int n, int a) normalise (); } +/* FIXME: why is octave == 0 and default not middleC ? */ Pitch::Pitch () { notename_ = 0; @@ -36,11 +36,11 @@ Pitch::compare (Pitch const &m1, Pitch const &m2) int a = m1.alteration_ - m2.alteration_; if (o) - return o; + return o; if (n) - return n; + return n; if (a) - return a; + return a; return 0; } @@ -50,9 +50,7 @@ Pitch::steps () const return notename_ + octave_*7; } -/* - should be settable from input? - */ +/* Should be settable from input? */ static Byte diatonic_scale_semitones[ ] = { 0, 2, 4, 5, 7, 9, 11 }; @@ -70,12 +68,11 @@ Pitch::semitone_pitch () const } if (alteration_ % 2) - { - programming_error ("Calling semitone_pitch() for quarter tone alterations."); - - } - - return (o + n / 7) * 12 + diatonic_scale_semitones[n % 7] + (alteration_/2); + programming_error ("semitone_pitch () called on quarter tone alteration."); + + return ((o + n / 7) * 12 + + diatonic_scale_semitones[n % 7] + + (alteration_ / 2)); } int @@ -88,8 +85,10 @@ Pitch::quartertone_pitch () const n += 7; o --; } - - return (o + n / 7) * 24 + 2* diatonic_scale_semitones[n % 7] + (alteration_); + + return ((o + n / 7) * 24 + + 2 * diatonic_scale_semitones[n % 7] + + alteration_); } void @@ -121,7 +120,7 @@ Pitch::normalise () alteration_ = 0; alteration_ -= quartertone_pitch () - pitch; } - + while (alteration_ < DOUBLE_FLAT) { if (notename_ == 0) @@ -141,10 +140,10 @@ Pitch::normalise () void Pitch::transpose (Pitch delta) { - int new_semi = quartertone_pitch () +delta.quartertone_pitch(); + int new_semi = quartertone_pitch () +delta.quartertone_pitch (); octave_ += delta.octave_; notename_ += delta.notename_; - alteration_ += new_semi - quartertone_pitch(); + alteration_ += new_semi - quartertone_pitch (); normalise (); } @@ -152,19 +151,18 @@ Pitch::transpose (Pitch delta) Pitch interval (Pitch const & from , Pitch const & to ) { - int sound = to.quartertone_pitch() - from.quartertone_pitch (); + int sound = to.quartertone_pitch () - from.quartertone_pitch (); Pitch pt (to.get_octave () - from.get_octave (), - to.get_notename() - from.get_notename(), + to.get_notename () - from.get_notename (), - to.get_alteration() - from.get_alteration()); + to.get_alteration () - from.get_alteration ()); - return pt.transposed (Pitch(0,0,sound - pt.quartertone_pitch())); + return pt.transposed (Pitch (0,0,sound - pt.quartertone_pitch ())); } /* FIXME - Merge with *pitch->text* funcs in chord-name.scm - */ + Merge with *pitch->text* funcs in chord-name.scm */ char const *accname[] = {"eses", "eseh", "es", "eh", "", "ih", "is" , "isih", "isis"}; @@ -192,20 +190,19 @@ Pitch::to_string () const return s; } -/* - change me to relative, counting from last pitch p - return copy of resulting pitch - */ +/* Change me to relative, counting from last pitch p + return copy of resulting pitch. */ Pitch Pitch::to_relative_octave (Pitch p) const { - int oct_mod = octave_ + 1; // account for c' = octave 1 iso. 0 4 + /* account for c' = octave 1 iso. 0 4 */ + int oct_mod = octave_ + 1; Pitch up_pitch (p); Pitch down_pitch (p); up_pitch.alteration_ = alteration_; down_pitch.alteration_ = alteration_; - + Pitch n = *this; up_pitch.up_to (notename_); down_pitch.down_to (notename_); @@ -215,7 +212,7 @@ Pitch::to_relative_octave (Pitch p) const n = up_pitch; else n = down_pitch; - + n.octave_ += oct_mod; return n; } @@ -223,10 +220,8 @@ Pitch::to_relative_octave (Pitch p) const void Pitch::up_to (int notename) { - if (notename_ > notename) - { - octave_ ++; - } + if (notename_ > notename) + octave_++; notename_ = notename; } @@ -234,29 +229,22 @@ void Pitch::down_to (int notename) { if (notename_ < notename) - { - octave_ --; - } + octave_--; notename_ = notename; } - -LY_DEFINE(ly_pitch_transpose, - "ly:pitch-transpose", 2, 0, 0, - (SCM p, SCM delta), - "Transpose @var{p} by the amount @var{delta}, where @var{delta} is the " -" pitch that central C is transposed to.") + +LY_DEFINE (ly_pitch_transpose, "ly:pitch-transpose", + 2, 0, 0, (SCM p, SCM delta), + "Transpose @var{p} by the amount @var{delta}, " + "where @var{delta} is relative to middle C.") { Pitch* t = unsmob_pitch (p); Pitch *d = unsmob_pitch (delta); - SCM_ASSERT_TYPE(t, p, SCM_ARG1, __FUNCTION__, "pitch") ; - SCM_ASSERT_TYPE(d, delta, SCM_ARG1, __FUNCTION__, "pitch") ; - + SCM_ASSERT_TYPE (t, p, SCM_ARG1, __FUNCTION__, "pitch"); + SCM_ASSERT_TYPE (d, delta, SCM_ARG1, __FUNCTION__, "pitch"); return t->transposed (*d).smobbed_copy (); } -/****************************************************************/ - - IMPLEMENT_TYPE_P (Pitch, "ly:pitch?"); SCM @@ -269,20 +257,18 @@ IMPLEMENT_SIMPLE_SMOBS (Pitch); int Pitch::print_smob (SCM s, SCM port, scm_print_state *) { - Pitch *r = (Pitch *) ly_cdr (s); - + Pitch *r = (Pitch *) ly_cdr (s); scm_puts ("#to_string ().to_str0 ()), port); scm_puts (" >", port); - return 1; } SCM Pitch::equal_p (SCM a , SCM b) { - Pitch *p = (Pitch *) ly_cdr (a); - Pitch *q = (Pitch *) ly_cdr (b); + Pitch *p = (Pitch *) ly_cdr (a); + Pitch *q = (Pitch *) ly_cdr (b); bool eq = p->notename_ == q->notename_ && p->octave_ == q->octave_ @@ -304,100 +290,93 @@ Pitch::less_p (SCM p1, SCM p2) return SCM_BOOL_F; } -/* - should add optional args - */ - -LY_DEFINE(make_pitch, "ly:make-pitch", 3, 0, 0, - (SCM o, SCM n, SCM a), - "@var{octave} is specified by an integer, zero for the octave containing " - "middle C. @var{note} is a number from 0 to 6, with 0 corresponding to C " - "and 6 corresponding to B. The shift is zero for a natural, negative for " - "flats, or positive for sharps. ") +/* Should add optional args. */ +LY_DEFINE (ly_make_pitch, "ly:make-pitch", + 3, 0, 0, (SCM octave, SCM note, SCM alter), + "@var{octave} is specified by an integer, " + "zero for the octave containing middle C. " + "@var{note} is a number from 0 to 6, " + "with 0 corresponding to C and 6 corresponding to B. " + "The @var{alter} is zero for a natural, negative for " + "flats, or positive for sharps. ") { - SCM_ASSERT_TYPE(gh_number_p (o), o, SCM_ARG1, __FUNCTION__, "number"); - SCM_ASSERT_TYPE(gh_number_p (n), n, SCM_ARG2, __FUNCTION__, "number"); - SCM_ASSERT_TYPE(gh_number_p (a), a, SCM_ARG3, __FUNCTION__, "number"); + SCM_ASSERT_TYPE (scm_integer_p (octave)== SCM_BOOL_T , octave, SCM_ARG1, __FUNCTION__, "integer"); + SCM_ASSERT_TYPE (scm_integer_p (note)== SCM_BOOL_T, note, SCM_ARG2, __FUNCTION__, "integer"); + SCM_ASSERT_TYPE (scm_integer_p (alter)== SCM_BOOL_T, alter, SCM_ARG3, __FUNCTION__, "integer"); - Pitch p (gh_scm2int (o), gh_scm2int (n), gh_scm2int (a)); + Pitch p (scm_to_int (octave), scm_to_int (note), scm_to_int (alter)); return p.smobbed_copy (); } -LY_DEFINE(pitch_steps, "ly:pitch-steps", 1, 0,0, - (SCM p), - "Number of steps counted from central C of the pitch @var{p}.") +LY_DEFINE (ly_pitch_steps, "ly:pitch-steps", 1, 0, 0, + (SCM p), + "Number of steps counted from middle C of the pitch @var{p}.") { Pitch *pp = unsmob_pitch (p); - SCM_ASSERT_TYPE(pp, p, SCM_ARG1, __FUNCTION__, "Pitch"); - - return gh_int2scm (pp->steps()); + SCM_ASSERT_TYPE (pp, p, SCM_ARG1, __FUNCTION__, "Pitch"); + return scm_int2num (pp->steps ()); } -LY_DEFINE(pitch_octave, "ly:pitch-octave", 1, 0, 0, - (SCM pp), - "extract the octave from pitch @var{p}.") +LY_DEFINE (ly_pitch_octave, "ly:pitch-octave", + 1, 0, 0, (SCM pp), + "Extract the octave from pitch @var{p}.") { Pitch *p = unsmob_pitch (pp); - SCM_ASSERT_TYPE(p, pp, SCM_ARG1, __FUNCTION__, "Pitch"); + SCM_ASSERT_TYPE (p, pp, SCM_ARG1, __FUNCTION__, "Pitch"); int q = p->get_octave (); - - return gh_int2scm (q); + return scm_int2num (q); } -LY_DEFINE(pitch_alteration, "ly:pitch-alteration", 1, 0, 0, - (SCM pp), - "extract the alteration from pitch @var{p}.") +LY_DEFINE (ly_pitch_alteration, "ly:pitch-alteration", + 1, 0, 0, (SCM pp), + "Extract the alteration from pitch @var{p}.") { Pitch *p = unsmob_pitch (pp); - SCM_ASSERT_TYPE(p, pp, SCM_ARG1, __FUNCTION__, "Pitch"); - int q = p->get_alteration (); + SCM_ASSERT_TYPE (p, pp, SCM_ARG1, __FUNCTION__, "Pitch"); + int q = p->get_alteration (); - return gh_int2scm (q); + return scm_int2num (q); } -LY_DEFINE(pitch_notename, "ly:pitch-notename", 1, 0, 0, - (SCM pp), - "extract the note name from pitch @var{pp}.") +LY_DEFINE (pitch_notename, "ly:pitch-notename", + 1, 0, 0, (SCM pp), + "Extract the note name from pitch @var{pp}.") { Pitch *p = unsmob_pitch (pp); - SCM_ASSERT_TYPE(p, pp, SCM_ARG1, __FUNCTION__, "Pitch"); - int q = p->get_notename (); - - return gh_int2scm (q); + SCM_ASSERT_TYPE (p, pp, SCM_ARG1, __FUNCTION__, "Pitch"); + int q = p->get_notename (); + return scm_int2num (q); } -LY_DEFINE(ly_pitch_quartertones, "ly:pitch-quartertones", 1, 0, 0, - (SCM pp), - "calculate the number of semitones of @var{p} from central C.") +LY_DEFINE (ly_pitch_quartertones, "ly:pitch-quartertones", + 1, 0, 0, (SCM pp), + "Calculate the number of quarter tones of @var{p} from middle C.") { Pitch *p = unsmob_pitch (pp); - SCM_ASSERT_TYPE(p, pp, SCM_ARG1, __FUNCTION__, "Pitch"); - + SCM_ASSERT_TYPE (p, pp, SCM_ARG1, __FUNCTION__, "Pitch"); int q = p->quartertone_pitch (); - - return gh_int2scm (q); + return scm_int2num (q); } -LY_DEFINE(ly_pitch_semitones, "ly:pitch-semitones", 1, 0, 0, - (SCM pp), - "calculate the number of semitones of @var{p} from central C.") +LY_DEFINE (ly_pitch_semitones, "ly:pitch-semitones", + 1, 0, 0, (SCM pp), + "calculate the number of semitones of @var{p} from middle C.") { Pitch *p = unsmob_pitch (pp); - SCM_ASSERT_TYPE(p, pp, SCM_ARG1, __FUNCTION__, "Pitch"); - + SCM_ASSERT_TYPE (p, pp, SCM_ARG1, __FUNCTION__, "Pitch"); int q = p->semitone_pitch (); - - return gh_int2scm (q); + return scm_int2num (q); } -LY_DEFINE(pitch_less, "ly:pitchsmobbed_self (); + return interval (*r, *p).smobbed_copy (); } int -Pitch::get_octave ()const +Pitch::get_octave () const { return octave_; } @@ -446,7 +418,7 @@ Pitch::get_alteration () const Pitch Pitch::transposed (Pitch d) const { - Pitch p =*this; + Pitch p = *this; p.transpose (d); return p; }