CLAM-Development  1.4.0
MIDITypes.hxx
Go to the documentation of this file.
1 #ifndef __MIDITYPES__
2 #define __MIDITYPES__
3 
4 #include <string>
5 #include "DynamicType.hxx"
6 #include "DataTypes.hxx"
7 #include "List.hxx"
8 #include "Array.hxx"
9 #include "MIDIMelody.hxx"
10 #include "ProcessingData.hxx"
11 
12 namespace CLAM
13 {
14  class MIDIEvent : public ProcessingData
15  {
16  public:
18  /* Event name */
19  DYN_ATTRIBUTE (0, public, std::string, Name);
20  /* Time in seconds */
21  DYN_ATTRIBUTE (1, public, TTime, Time);
22  /* flag to indicate that this is the last event */
23  DYN_ATTRIBUTE (2, public, bool, Last);
24  /* Message */
25  DYN_ATTRIBUTE (3, public, Array<TMIDIByte>, Message);
26 
27  unsigned Ticks() const;
28  unsigned TicksFromDuration() const;
29  int Length() const;
30 
31  bool operator==(const MIDIEvent& ev) {return Ticks()==ev.Ticks();}
32  bool operator<(const MIDIEvent& ev) {return Ticks()<ev.Ticks();}
33  bool operator>(const MIDIEvent& ev) {return Ticks()>ev.Ticks();}
34  bool operator==(const MIDIEvent& ev) const {return Ticks()==ev.Ticks();}
35  bool operator<(const MIDIEvent& ev) const {return Ticks()<ev.Ticks();}
36  bool operator>(const MIDIEvent& ev) const {return Ticks()>ev.Ticks();}
37 
38  private:
39  void DefaultInit();
40  };
41 
42  class MIDITrack : public ProcessingData
43  {
44  public:
46  /* Track name */
47  DYN_ATTRIBUTE (0, public, std::string, Name);
48  /* MIDI channels for notes in the melody */
49  DYN_ATTRIBUTE (1, public, List<int>, Channels);
50  /* Event info list */
51  DYN_ATTRIBUTE (2, public, List<MIDIEvent>, EventInfo);
52  /* Track melody */
53  DYN_ATTRIBUTE (3, public, MIDIMelody, TrackMelody);
54 
55  private:
56  void DefaultInit();
57  };
58 
59  class MIDISong : public ProcessingData
60  {
61  public:
63  /* Song name */
64  DYN_ATTRIBUTE (0, public, std::string, Name);
65  /* Song tracks */
66  DYN_ATTRIBUTE (1, public, Array<MIDITrack>, Tracks);
67  /* Number of tracks */
68  DYN_ATTRIBUTE (2, public, int, NumberOfTracks);
69 
70  private:
71  void DefaultInit();
72  };
73 }
74 
75 #endif
76