]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/new-repeated-music.hh
release: 1.1.43
[lilypond.git] / lily / include / new-repeated-music.hh
1 /*   
2   new-repeated-music.hh -- declare New_repeated_music
3   
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7   
8  */
9
10 #ifndef NEW_REPEATED_MUSIC_HH
11 #define NEW_REPEATED_MUSIC_HH
12
13 #include "music.hh"
14
15
16 /**
17    Musical repeats.
18
19    A repeat, when played has the form of BODY A BODY B BODY C.
20
21    In this examples, the list {A B C} is put in ALTERNATIVES_P_.  BODY
22    is put in REPEAT_BODY_P_.  Either the body or the alternative may
23    be omitted.
24
25    There are three modes of representing this  music:
26
27    BODY A
28         B
29         C
30
31    is called "folded". Mostly used for lyrics.
32
33    
34    BODY A B C
35
36    is called "semi" folded.  This is common notation
37
38    BODY A BODY B BODY C
39
40    is called unfolded.  Useful for MIDI.
41
42 */
43 class New_repeated_music : public Music
44 {
45 public:
46   bool fold_b_;
47   /// if FOLD_B_ is false, semifold this.
48   bool semi_fold_b_;
49
50   /// how often do we repeat?
51   int repeats_i_;
52
53   Music * repeat_body_p_;
54   Music_sequence * alternatives_p_;
55
56   virtual Musical_pitch to_relative_octave (Musical_pitch);
57
58   /// The duration of this piece of music
59   virtual Moment length_mom () const;
60
61   Moment alternatives_length_mom () const;
62
63   void print() const;
64   /// Transpose, with the interval central C to #p#
65   virtual void transpose (Musical_pitch p);
66
67   /// Scale the music in time by #factor#.
68   virtual void compress (Moment factor);
69   VIRTUAL_COPY_CONS(Music);
70
71   New_repeated_music (Music*, int , Music_sequence*);
72   New_repeated_music (New_repeated_music const&);
73   ~New_repeated_music ();
74 protected:
75   virtual void do_print() const;
76 };
77
78
79 #endif /* NEW_REPEATED_MUSIC_HH */