]> git.donarmstrong.com Git - lilypond.git/commitdiff
(create_audio_elements): Check for minor
authorjanneke <janneke>
Wed, 6 Aug 2003 13:47:03 +0000 (13:47 +0000)
committerjanneke <janneke>
Wed, 6 Aug 2003 13:47:03 +0000 (13:47 +0000)
key.  Only if key is minor, set MIDI key to minor.

ChangeLog
lily/key-performer.cc

index 6121f2fd1e5e957b0a169ed341681ed039fc489e..a018b9926315650fe56f8188a51fab4dcb18fe44 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2003-08-06  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+       * lily/key-performer.cc (create_audio_elements): Check for minor
+       key.  Only if key is minor, set MIDI key to minor.
+
 2003-08-06  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
 
        * mf/feta-eindelijk.mf (tracingvariables): add TODO.
index 52d5f42e6cd901db1c5fcf62925b6364ccc3d6a8..d596c7399e71ee2f379ef34e9fd0be1a03a93974 100644 (file)
@@ -44,33 +44,26 @@ 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 acc = gh_call1 (proc, pitchlist);
-      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 ()));
-
-      SCM c_pitchlist = ly_transpose_key_alist (pitchlist, to_c.smobbed_copy());
+      Pitch c_do (0, 0, 0);
+                 
+      SCM c_pitchlist
+       = ly_transpose_key_alist (pitchlist,
+                                 interval (key_do, c_do).smobbed_copy ());
 
-      /*
-       MIDI keys are too limited for lilypond scales.
+      /* MIDI keys are too limited for lilypond scales.
+        We check for minor scale and assume major otherwise.  */
+      SCM minor = scm_primitive_eval (ly_symbol2scm ("minor"));
+      audio_ = new Audio_key (gh_scm2int (acc),
+                             SCM_BOOL_T != scm_equal_p (minor, c_pitchlist));
 
-       TODO: should probably detect minor key, though.
-      */
-      audio_ = new Audio_key (gh_scm2int (acc), true); 
       Audio_element_info info (audio_, key_req_);
       announce_element (info);
       key_req_ = 0;