]> git.donarmstrong.com Git - lilypond.git/blobdiff - hdr/inputmusic.hh
partial: 0.0.38.hanjan
[lilypond.git] / hdr / inputmusic.hh
index d33e157fe8b80ef3785e9f731f5335713fd3ef51..da3030f11b28dea34d9b093663b640b906957f9a 100644 (file)
@@ -1,7 +1,7 @@
 /*
   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