]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/note-performer.cc
patch::: 1.1.52.mb2
[lilypond.git] / lily / note-performer.cc
index 12c8601da3a3e23c85363e67d3a3fb17f0ad0780..a96439a92884d6ad253ae146f32c838b72be4c10 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996,  1997--1998 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1996,  1997--1999 Jan Nieuwenhuizen <janneke@gnu.org>
  */
 
 #include "note-performer.hh"
 #include "audio-item.hh"
 #include "debug.hh"
 
-IMPLEMENT_IS_TYPE_B1 (Note_performer,Performer);
+
 ADD_THIS_TRANSLATOR (Note_performer);
 
 Note_performer::Note_performer ()
 {
-  note_req_l_ = 0;
 }
 
 void 
 Note_performer::do_print () const
 {
 #ifndef NPRINT
-  if (note_req_l_) 
-      note_req_l_->print ();
+  if (note_req_l_.size()>0)
+    for(int i=0;i<note_req_l_.size();i++)
+      note_req_l_[i]->print ();
 #endif
 }
 
 void 
 Note_performer::do_process_requests () 
 {
-  // this is _really_ braindead, but it generates some output
-  if (!note_req_l_ || !note_req_l_->access_Melodic_req ()  || !note_req_l_->access_Rhythmic_req ())
-    return;
-
-  int transposing_i = 0;
-  //urg
-  Scalar prop = get_property ("transposing");
-  if (!prop.empty_b () && prop.isnum_b ()) 
-    transposing_i = prop;
-
-
-  play (new Audio_note (note_req_l_, transposing_i));
-
-  note_req_l_ = 0;
+  if (note_req_l_.size()>0)
+    {
+      int transposing_i = 0;
+      //urg
+      Scalar prop = get_property ("transposing", 0);
+      if (!prop.empty_b () && prop.isnum_b ()) 
+       transposing_i = prop;
+
+      while(note_req_l_.size()>0)
+       play (new Audio_note (note_req_l_.pop(), transposing_i));
+
+    }
 }
 
 bool 
-Note_performer::do_try_request (Request* req_l)
+Note_performer::do_try_music (Music* req_l)
 {
-  if (note_req_l_)
-    return false;
-  
-  if (!req_l->access_Musical_req () || !req_l->access_Musical_req ()->access_Note_req ())
-    return false;
-
-  note_req_l_ = req_l->access_Musical_req ()->access_Melodic_req ();
-
-  return true;
+  if (Note_req *nr = dynamic_cast <Note_req *> (req_l))
+    {
+      note_req_l_.push(nr);
+      return true;
+    }
+  return false;
 }