This repository has been archived by the owner on Sep 18, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
track.hpp
64 lines (48 loc) · 1.77 KB
/
track.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#ifndef TRACK_HPP
#define TRACK_HPP
#include <list>
#include "event.hpp"
/** A Track represents a sequence of Events ordered by thier MIDI tock time.
* Events can be added to the Track based on type of event. Events can be accessed
* using a constant iterator in order, first to last.
*/
class Track{
public:
/** Typdef for iterator type. This object should support the operators
* ++, *, and -> (i.e. it is a forward iterator).
*/
typedef std::list<MIDIEvent>::const_iterator ConstIteratorType;
public:
/** Construct Track with ticks per beat in microsec.
* default is 480 MIDI ticks per beat
*/
Track(intmax_t ticks_per_beat = 480);
/** Get ticks per beat in microsec. */
intmax_t getTicksPerBeat() const;
/** Get iterator to first event. */
ConstIteratorType begin() const;
/** Get iterator to end of event sequence. */
ConstIteratorType end() const;
/** Add an EndEvent to the track sequence.
* \param tick_time, the MIDI tick time of the event.
*/
void addEndEvent(intmax_t tick_time);
/** Add a TempoEvent to the track sequence.
* \param tempo the new tempo of the track after this tick
* \param tick_time the MIDI tick time of the event.
*/
void addTempoEvent(intmax_t tempo, intmax_t tick_time);
/** Add a NoteEvent to the track sequence.
* \param code the event code (8 = On, 9 = Off unless data2 = 0)
* \param data1 the first data byte (holding the note number)
* \param data2 the second data byte (holding the velocity)
* \param tick_time, the MIDI tick time of the event.
*/
void addNoteEvent(uint8_t code, uint8_t data1, uint8_t data2, intmax_t tick_time);
private:
std::list<MIDIEvent> trackevents;
intmax_t ticksperbeat;
};
/** A list of tracks. */
typedef std::list<Track> TrackListType;
#endif