X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fkey-performer.cc;h=c9ced39f6ab631d1d43891859a55ed880d1e1cf7;hb=6b93aa32e32d736202d803c68f5156cc253a5f7c;hp=8836930bb4908ac7813095a6203bdc8b1f7e309e;hpb=7ea5c74058200ace4b405de82e1088560aeaacb2;p=lilypond.git diff --git a/lily/key-performer.cc b/lily/key-performer.cc index 8836930bb4..c9ced39f6a 100644 --- a/lily/key-performer.cc +++ b/lily/key-performer.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2003 Jan Nieuwenhuizen + (c) 1997--2004 Jan Nieuwenhuizen */ #include "lily-guile.hh" @@ -16,7 +16,7 @@ class Key_performer : public Performer { public: - TRANSLATOR_DECLARATIONS(Key_performer); + TRANSLATOR_DECLARATIONS (Key_performer); ~Key_performer (); protected: @@ -44,30 +44,27 @@ Key_performer::create_audio_elements () { if (key_req_) { - - /* - UGH. primitive-eval. - */ - SCM pitchlist = key_req_->get_mus_property ("pitch-alist"); - SCM proc = scm_primitive_eval (ly_symbol2scm ("accidentals-in-key")); + SCM pitchlist = key_req_->get_property ("pitch-alist"); + SCM proc = ly_scheme_function ("alterations-in-key"); + SCM acc = gh_call1 (proc, pitchlist); - proc = scm_primitive_eval (ly_symbol2scm ("major-key")); - - Pitch my_do (0, - gh_scm2int (ly_caar (pitchlist)), - gh_scm2int (ly_cdar (pitchlist))); - - Pitch to_c (-1, - (7 - gh_scm2int (ly_caar (pitchlist))) % 7, - -gh_scm2int (ly_cdar (pitchlist))); + + Pitch key_do (0, + gh_scm2int (ly_caar (pitchlist)), + gh_scm2int (ly_cdar (pitchlist))); - my_do = my_do.transposed (to_c); - to_c = my_do.transposed (Pitch(0,0,- my_do.get_alteration ())); + Pitch c_do (0, 0, 0); + + SCM c_pitchlist + = ly_transpose_key_alist (pitchlist, + interval (key_do, c_do).smobbed_copy ()); - SCM c_pitchlist = transpose_key_alist (pitchlist, to_c.smobbed_copy()); - SCM major = gh_call1 (proc, c_pitchlist); + /* MIDI keys are too limited for lilypond scales. + We check for minor scale and assume major otherwise. */ + SCM minor = scm_c_eval_string ("minor"); + audio_ = new Audio_key (gh_scm2int (acc), + SCM_BOOL_T != scm_equal_p (minor, c_pitchlist)); - audio_ = new Audio_key (gh_scm2int (acc), major == SCM_BOOL_T); Audio_element_info info (audio_, key_req_); announce_element (info); key_req_ = 0; @@ -99,7 +96,7 @@ Key_performer::try_music (Music* req) return false; } -ENTER_DESCRIPTION(Key_performer, +ENTER_DESCRIPTION (Key_performer, "","", "key-change-event", "","","");