]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/performance.cc
Merge branch 'cvs-head' of ssh+git://hanwen@repo.or.cz/srv/git/lilypond into master...
[lilypond.git] / lily / performance.cc
index 130cd4a2ec5cd0f185c611682c200a38e5593f5e..0bfe37ee826581ccab7815b50afd71930725740f 100644 (file)
 
   source file of the GNU LilyPond music typesetter
 
 
   source file of the GNU LilyPond music typesetter
 
-  (c)  1997--1999 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 */
 
-#include <time.h>
-#include "debug.hh"
-#include "string.hh"
-#include "string-convert.hh"
+#include "performance.hh"
+
+#include <ctime>
+using namespace std;
+
+#include "audio-column.hh"
+#include "audio-staff.hh"
+#include "file-name.hh"
+#include "international.hh"
+#include "lily-version.hh"
 #include "main.hh"
 #include "main.hh"
-#include "midi-def.hh"
 #include "midi-item.hh"
 #include "midi-stream.hh"
 #include "midi-item.hh"
 #include "midi-stream.hh"
-#include "audio-column.hh"
-#include "audio-staff.hh"
-#include "performance.hh"
 #include "score.hh"
 #include "score.hh"
-#include "file-results.hh"
-#include "lily-version.hh"
-
-#include "killing-cons.tcc"
+#include "string-convert.hh"
+#include "warn.hh"
 
 Performance::Performance ()
 {
 
 Performance::Performance ()
 {
-  midi_l_ =0;
-  audio_elem_p_list_ = 0;
+  midi_ = 0;
 }
 
 }
 
-
-Performance::~Performance()
+Performance::~Performance ()
 {
 {
-  delete audio_elem_p_list_;
+  junk_pointers (audio_elements_);
 }
 
 void
 }
 
 void
-Performance::output (Midi_streammidi_stream)
+Performance::output (Midi_stream &midi_stream)
 {
 {
-  int tracks_i = audio_staff_l_arr_.size() + 1;
+  int tracks_ = audio_staffs_.size ();
 
   // ugh
 
   // ugh
-  int clocks_per_4_i = 384;
+  int clocks_per_4 = 384;
 
 
-  midi_stream << Midi_header (1, tracks_i, clocks_per_4_i);
-  output_header_track (midi_stream);
-  int channel = 1;
-  for (int i =0; i < audio_staff_l_arr_.size (); i++)
+  midi_stream << Midi_header (1, tracks_, clocks_per_4);
+  message (_ ("Track...") + " ");
+  int channel = 0;
+  for (vsize i = 0; i < audio_staffs_.size (); i++)
     {
     {
-      Audio_staff *s = audio_staff_l_arr_[i];
+      Audio_staff *s = audio_staffs_[i];
+      if (be_verbose_global)
+       progress_indication ("[" + to_string (i));
 
       /*
 
       /*
-       Aargh, let's hear it for the MIDI standard.
        MIDI players tend to ignore instrument settings on
        channel 10, the percussion channel by default.
        MIDI players tend to ignore instrument settings on
        channel 10, the percussion channel by default.
-       */
-      if (channel == 10)
+      */
+      if (channel % 16 == 9)
        channel++;
        channel++;
-      s->output (midi_stream, channel++);
-    }
-}
-
-void
-Performance::output_header_track (Midi_stream& midi_stream)
-{
-  Midi_track midi_track;
-
-  // perhaps multiple text events?
-  String str = String (_("Creator: "));
-  if (no_timestamps_global_b)
-    str += gnu_lilypond_str ();
-  else
-    str += gnu_lilypond_version_str();
-  str += "\n";
-
-  Midi_text creator (Midi_text::TEXT, str);
-  midi_track.add (Moment (0), &creator);
-
-  str = _("Automatically generated");
-  if (no_timestamps_global_b)
-    str += ".\n";
-  else
-    {
-      str += _(", at ");
-      time_t t (time (0));
-      str += ctime (&t);
-      str = str.left_str (str.length_i() - 1);
-    }
-  Midi_text generate (Midi_text::TEXT, str);
-  midi_track.add (Moment (0), &generate);
 
 
-  str = _f ("from musical definition: %s", origin_str_);
-
-  Midi_text from (Midi_text::TEXT, str);
-  midi_track.add (Moment (0), &from);
-
-  Midi_text track_name (Midi_text::TRACK_NAME, "Track "
-                       + String_convert::i2dec_str (0, 0, '0'));
-  midi_track.add (Moment (0), &track_name);
-
-  Midi_tempo tempo (midi_l_->get_tempo_i (Moment (1, 4)));
-  midi_track.add (Moment (0), &tempo);
-
-  midi_stream << midi_track;
-}
+      /*
+       Huh? Why does each staff also have a separate channel? We
+       should map channels to voices, not staves. --hwn.
+      */
+      if (channel > 15)
+       {
+         warning (_ ("MIDI channel wrapped around"));
+         warning (_ ("remapping modulo 16"));
+       }
 
 
-void
-Performance::add_element (Audio_element *p)
-{
-  if (Audio_staff*s=dynamic_cast<Audio_staff *> (p)) 
-    {
-      audio_staff_l_arr_.push (s);
-    }
-  else if (Audio_column *c = dynamic_cast<Audio_column*>(p))
-    {
-      c->performance_l_ = this;
+      s->output (midi_stream, channel);
+      channel ++;
+      if (be_verbose_global)
+       progress_indication ("]");
     }
     }
-  audio_elem_p_list_ = new Killing_cons<Audio_element> (p, audio_elem_p_list_);
 }
 
 void
 }
 
 void
-Performance::print() const
+Performance::add_element (Audio_element *p)
 {
 {
-#ifndef NPRINT
-  DOUT << "Performance { ";
-  DOUT << "Items: ";
-  for (Cons<Audio_element>* i =audio_elem_p_list_; i; i = i->next_)
-    i->car_->print ();
-  DOUT << "}";
-#endif
+  audio_elements_.push_back (p);
 }
 
 void
 }
 
 void
-Performance::process()
+Performance::write_output (string out)
 {
 {
-  print ();
+  if (out == "-")
+    out = "lelie.midi";
 
 
-  String out = midi_l_->get_default_output ();
-  if (out.empty_b ())
-    {
-      
-      out = default_outname_base_global;
-      if (out == "-")
-        out = "lelie";
-      int def = midi_l_->get_next_default_count ();
-      if (def)
-       {
-         out += "-" + to_str (def);
-       }
+  /* Maybe a bit crude, but we had this before */
+  File_name file_name (out);
+  file_name.ext_ = "midi";
+  out = file_name.to_string ();
 
 
-      out += ".midi";
-    }
-  
   Midi_stream midi_stream (out);
   Midi_stream midi_stream (out);
-  *mlog << _f ("MIDI output to %s...", out) << endl;
-  target_str_global_array.push (out);
+  message (_f ("MIDI output to `%s'...", out));
 
   output (midi_stream);
 
   output (midi_stream);
-  *mlog << endl;
+  progress_indication ("\n");
 }
 }
+
+