]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/midi-item.cc
2002-07-13 Han-Wen <hanwen@cs.uu.nl>
[lilypond.git] / lily / midi-item.cc
index fb3d1eb5e6d429940e126d63aba334f95e1f0f9a..22176a87aabe21785066420f73b38ae979983ce0 100644 (file)
@@ -3,10 +3,10 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c)  1997--2001 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c)  1997--2002 Jan Nieuwenhuizen <janneke@gnu.org>
  */
 
-#include "debug.hh"
+#include "warn.hh"
 #include "main.hh"
 #include "misc.hh"
 #include "string.hh"
@@ -15,6 +15,7 @@
 #include "midi-stream.hh"
 #include "audio-item.hh"
 #include "duration.hh"
+#include "scm-option.hh"
 
 #include "killing-cons.tcc"
 
@@ -90,10 +91,15 @@ Midi_event::Midi_event (Moment delta_mom, Midi_item* midi_p)
   midi_p_ = midi_p;
 }
 
+/*
+  ugh. midi output badly broken since grace note hackage.
+ */
 String
 Midi_event::str () const
 {
-  int delta_i = delta_mom_ * Moment (384 * 4); // ugh.
+  Rational rat_dt = (delta_mom_.main_part_ * Rational (384) +
+    delta_mom_.grace_part_ * Rational (100))*Rational (4);
+  int delta_i = int (rat_dt);
 
   String delta_str = Midi_item::i2varint_str (delta_i);
   String midi_str = midi_p_->str ();
@@ -129,7 +135,7 @@ Midi_instrument::str() const
 {
   Byte program_byte = 0;
   bool found = false;
-  SCM proc = scm_eval2 (ly_symbol2scm ("midi-program"), SCM_EOL); 
+  SCM proc = scm_primitive_eval (ly_symbol2scm ("midi-program")); 
   SCM program = gh_call1 (proc, ly_symbol2scm (audio_l_->str_.ch_C()));
   found = (program != SCM_BOOL_F);
   if (found)
@@ -200,12 +206,12 @@ Midi_time_signature::Midi_time_signature (Audio_time_signature* a)
 String
 Midi_time_signature::str () const
 {
-  int num_i = audio_l_->beats_i_;
-  int den_i = audio_l_->one_beat_i_;
+  int num = audio_l_->beats_i_;
+  int den = audio_l_->one_beat_i_;
 
   String str = "ff5804";
-  str += String_convert::i2hex_str (num_i, 2, '0');
-  str += String_convert::i2hex_str (intlog2 (den_i) , 2, '0');
+  str += String_convert::i2hex_str (num, 2, '0');
+  str += String_convert::i2hex_str (intlog2 (den) , 2, '0');
   str += String_convert::i2hex_str (clocks_per_1_i_, 2, '0');
   str += String_convert::i2hex_str (8, 2, '0');
   return String_convert::hex2bin_str (str);
@@ -222,7 +228,8 @@ Midi_note::length_mom () const
 {
   Moment m = audio_l_->length_mom_;
 #if 0
-  if (m < Moment (1, 1000))
+  //junkme?
+  if (m < Moment (Rational (1, 1000)))
     {
       warning (_ ("silly duration"));
       m = 1;
@@ -323,7 +330,7 @@ Midi_piano_pedal::str () const
     str += to_str ((char)0x42);
   else if (audio_l_->type_str_ == "Sustain")
     str += to_str ((char)0x40);
-  else if (audio_l_->type_str_ == "UnaChorda")
+  else if (audio_l_->type_str_ == "UnaCorda")
     str += to_str ((char)0x43);
 
   int pedal = ((1 - audio_l_->dir_) / 2) * 0x7f;