File: mfallegro.h

package info (click to toggle)
audacity 1.2.3-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 22,600 kB
  • ctags: 20,360
  • sloc: ansic: 139,525; cpp: 55,197; sh: 24,963; lisp: 3,772; makefile: 1,679; python: 272
file content (86 lines) | stat: -rwxr-xr-x 2,290 bytes parent folder | download | duplicates (3)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// midifile reader interface for serpent

// a sequence of Events objects
class Tracks {
private:
    long max;
    void expand();
public:
    long len;
    Events_ptr *tracks; // tracks is array of pointers
    Events_ptr &operator[](int i) {
        assert(i >= 0 && i < len);
        return tracks[i];
    }
    Tracks() {
        max = len = 0;
        tracks = NULL;
    }
    void append(Events_ptr track);
    void reset();
};


typedef class Pending {
public:
    Allegro_note_ptr note;
    class Pending *next;
    Pending(Allegro_note_ptr n, class Pending *list) { note = n; next = list; }
} *Pending_ptr;


class Allegro_midifile_reader: public Midifile_reader {
public:
    FILE *file;
    Seq_ptr seq;
    int divisions;
    Pending_ptr pending;
    Tracks tracks;
    Events_ptr track;
    int track_num;

    Allegro_midifile_reader() { file = NULL; pending = NULL; }
    // delete destroys the seq member as well, so set it to NULL if you
    // copied the pointer elsewhere
    virtual ~Allegro_midifile_reader();
    // the following is used to load the Seq from the file:
    void initialize(FILE *file);

    void set_nomerge(bool flag) { Mf_nomerge = flag; }
    void set_skipinit(bool flag) { Mf_skipinit = flag; }
    long get_currtime() { return Mf_currtime; }



protected:
    void merge_tracks();
    double get_time();
    void update(int chan, int key, Parameter_ptr param);
    void *Mf_malloc(size_t size) { return malloc(size); }
    void Mf_free(void *obj, size_t size) { free(obj); }
    /* Methods to be called while processing the MIDI file. */
    void Mf_starttrack();
    void Mf_endtrack();
    int Mf_getc();
    void Mf_eot();
    void Mf_error(char *);
    void Mf_header(int,int,int);
    void Mf_on(int,int,int);
    void Mf_off(int,int,int);
    void Mf_pressure(int,int,int);
    void Mf_controller(int,int,int);
    void Mf_pitchbend(int,int,int);
    void Mf_program(int,int);
    void Mf_chanpressure(int,int);
    void Mf_sysex(int,char*);
    void Mf_arbitrary(int,char*);
    void Mf_metamisc(int,int,char*);
    void Mf_seqnum(int);
    void Mf_smpte(int,int,int,int,int);
    void Mf_timesig(int,int,int,int);
    void Mf_tempo(int);
    void Mf_keysig(int,int);
    void Mf_sqspecific(int,char*);
    void Mf_text(int,int,char*);
};