]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/repeated-music.hh
* Another grand 2003 update.
[lilypond.git] / lily / include / repeated-music.hh
index 1528f5810b195c2d9375a15c826e81d9ac1e1510..b2873e1e2a990161a9e52e782144814dfd262da8 100644 (file)
@@ -3,37 +3,78 @@
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 1998 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c)  1999--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
   
  */
 
-#ifndef REPEATED_MUSIC_HH
-#define REPEATED_MUSIC_HH
+#ifndef RepEATED_MUSIC_HH
+#define RepEATED_MUSIC_HH
+
+#include "music.hh"
 
-#include "music-list.hh"
 
 /**
-   Repeats and voltas
- */
+   Musical repeats.
+
+   A repeat, when played has the form of BODY A BODY B BODY C.
+
+   In this examples, the list {A B C} is put in ALTERNATIVES_P_.  BODY
+   is put in REPEAT_BODY_P_.  Either the body or the alternative may
+   be omitted.
+
+   There are three modes of representing this  music:
+
+   BODY A
+        B
+       C
+
+   is called "folded". Mostly used for lyrics.
+
+   
+   BODY A B C
+
+   is called volta.  This is common notation
+
+   BODY A BODY B BODY C
+
+   is called unfolded.  Useful for MIDI.
+
+   If the number of repeats is smaller than the number of alternatives, then
+   the excess alternatives are ignored for all timing purposes.
+
+   If the number of repeats is bigger than the number of alternatives, then
+   the first alternative is assumed to be repeated.
+   
+*/
 class Repeated_music : public Music
 {
 public:
-  int repeats_i_;
-  Music* repeat_p_;
-//  Music_list* alternative_p_;
-  Music_sequence* alternative_p_;
-
-//  Repeated_music (Music*, int n, Music_list*);
-  Repeated_music (Music*, int n, Music_sequence*);
-  Repeated_music (Repeated_music const& s);
-  virtual ~Repeated_music ();
+  Music * body () const;
+  SCM alternatives () const;
+
+  /// how often do we repeat?
+  int repeat_count ( ) const;
+  virtual Pitch to_relative_octave (Pitch);
+
+  Moment body_get_length () const;
+  Moment alternatives_get_length (bool fold) const;
+  Moment alternatives_volta_get_length () const;  
+
+  DECLARE_SCHEME_CALLBACK (unfolded_music_length, (SCM));
+  DECLARE_SCHEME_CALLBACK (volta_music_length, (SCM));
+  DECLARE_SCHEME_CALLBACK (folded_music_length, (SCM));    
+  DECLARE_SCHEME_CALLBACK (minimum_start, (SCM));
+  DECLARE_SCHEME_CALLBACK (first_start, (SCM));    
   
-  virtual void do_print () const;
-  virtual void transpose (Musical_pitch p);
-  virtual Moment duration () const;
-  virtual Musical_pitch to_relative_octave (Musical_pitch p);
-  VIRTUAL_COPY_CONS(Music);
+  /// Transpose, with the interval central C to #p#
+  virtual void transpose (Pitch p);
+
+  /// Scale the music in time by #factor#.
+  virtual void compress (Moment factor);
+  VIRTUAL_COPY_CONS (Music);
+  Repeated_music ();
+  Repeated_music (SCM);
 };
 
-#endif /* REPEATED_MUSIC_HH */
 
+#endif /* RepEATED_MUSIC_HH */