/*
inputmusic.hh -- part of LilyPond
- (c) 1996 Han-Wen Nienhuys
+ (c) 1996,97 Han-Wen Nienhuys
*/
#ifndef INPUTMUSIC_HH
#include "plist.hh"
#include "proto.hh"
+#include "voice.hh"
+#include "moment.hh"
struct Voice_list : public PointerList<Voice*> {
- void translate_time(Real dt);
- /// delete stuff; not in destructor!
- void junk();
+ void translate_time(Moment dt);
};
-struct Vertical_music {
- virtual Vertical_simple *simple() { return 0;}
- virtual Voice_list convert()=0;
- virtual Real length()=0;
- virtual void translate_time(Real dt)=0;
- virtual Vertical_music *clone() const = 0;
- virtual ~Vertical_music() {}
- virtual void print() const =0;
-};
+/**
+
+ A set voices.
+ Input_music is anything that can simply be regarded as/converted to
+ a set of voices "cooperating" or independant. It has some basic
+ characteristics that real music has too:
-struct Horizontal_music {
- virtual Voice_list convert()=0;
- virtual Real length()=0;
- virtual void translate_time(Real dt)=0;
- virtual Horizontal_music *clone() const = 0;
- virtual ~Horizontal_music() {}
+ - it is rhythmic (it has a length, and can be translated horizontally)
+ - a pitch (it can be transposed)
+
+ */
+struct Input_music {
+ virtual Voice_list convert()const=0;
+ void check_plet(Voice_element* velt_l);
+ virtual Moment length()const=0;
+ virtual void translate_time(Moment dt)=0;
+ virtual ~Input_music(){}
virtual void print() const =0;
+ virtual void set_default_group(String)=0;
+ virtual bool find_plet_start_bo(char c, Moment& moment_r) = 0;
+ virtual void set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i) = 0;
+ // virtual void transpose(...) const =0;
+
+
+ virtual Input_music *clone() const = 0;
+ virtual Simple_music *simple() { return 0; }
};
-struct Vertical_simple : Vertical_music {
- Voice * voice_; // should be a real member
-
- /****************/
- Vertical_simple(Vertical_simple const&);
- Vertical_simple();
- ~Vertical_simple();
+/// Simple music consists of one voice
+struct Simple_music : Input_music {
+ Voice voice_;
+
+ /* *** */
+ virtual Simple_music*simple() { return this; }
void add(Voice_element*);
- virtual Vertical_simple*simple() { return this; }
- virtual Real length();
- virtual Voice_list convert();
- virtual void translate_time(Real dt);
- virtual Vertical_music *clone() const {
- return new Vertical_simple(*this);
+ virtual void set_default_group(String g) { voice_.set_default_group(g); }
+ virtual Moment length()const;
+ virtual Voice_list convert()const;
+ virtual void translate_time(Moment dt);
+ virtual void print() const;
+ virtual bool find_plet_start_bo(char c, Moment& moment_r);
+ virtual void set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i);
+ virtual Input_music *clone() const {
+ return new Simple_music(*this);
}
+
+};
+
+/// Complex_music consists of multiple voices
+struct Complex_music : Input_music {
+ IPointerList<Input_music*> elts;
+ /* *************** */
+ virtual void set_default_group(String g);
+ void add(Input_music*);
+ Complex_music();
+ Complex_music(Complex_music const &);
virtual void print() const ;
+ void concatenate(Complex_music*);
+ virtual bool find_plet_start_bo(char c, Moment& moment_r);
+ virtual void set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i);
+
};
-struct Music_voice : Horizontal_music {
- IPointerList<Vertical_music*> voice_ ;
+
+/**
+ A voice like list of music.
+
+ different music forms which start after each other ( concatenated,
+ stacked "horizontally )
+
+ */
+
+struct Music_voice : Complex_music {
+
- /****************/
- Music_voice() {}
- Music_voice(Music_voice const&);
- Real length();
- void add(Vertical_music*);
- void add(Voice_element*);
- virtual Voice_list convert();
- virtual void translate_time(Real dt);
- virtual Horizontal_music *clone() const {
+ /* *************** */
+ Moment length()const;
+ virtual void translate_time(Moment dt);
+ virtual Voice_list convert()const;
+ void add_elt(Voice_element*);
+ virtual Input_music *clone() const {
return new Music_voice(*this);
}
- void concatenate(Music_voice*);
virtual void print() const ;
};
-struct Music_general_chord : Vertical_music {
- IPointerList<Horizontal_music*> chord_;
-
- /****************/
- Music_general_chord() {}
- Music_general_chord(Music_general_chord const&s);
- void add(Horizontal_music*);
- virtual Real length();
- virtual Voice_list convert();
- virtual void translate_time(Real dt);
- virtual Vertical_music *clone() const {
+/**
+ Multiple musicstuff stacked on top of each other
+ chord like :
+
+ - different music forms which start at the same time ( stacked "vertically" )
+
+ */
+struct Music_general_chord : Complex_music {
+
+
+ /* *************** */
+
+ virtual Moment length()const;
+ virtual Voice_list convert()const;
+ virtual void translate_time(Moment dt);
+ void add_elt(Voice_element*);
+ virtual Input_music *clone() const {
return new Music_general_chord(*this);
}
- void concatenate(Music_general_chord*);
+
virtual void print() const ;
};
+struct Multi_voice_chord : Music_general_chord {
+ void set_default_group(String);
+ virtual Input_music *clone() const {
+ return new Multi_voice_chord(*this);
+ }
+};
+struct Voice_group_chord : Music_general_chord {
+ virtual Input_music *clone() const {
+ return new Voice_group_chord(*this);
+ }
+};
#endif // INPUTMUSIC_HH