Mercurial > hg > forks > bilotrip-mj12
annotate src/midifile.c @ 37:1db62040204e
Combine some headers to single mplatform.h
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 05 Aug 2013 21:53:33 +0300 |
parents | a14cc6c5d7ef |
children | 2170556dc71f |
rev | line source |
---|---|
0 | 1 /* |
2 * midiFile.c - A general purpose midi file handling library. This code | |
3 * can read and write MIDI files in formats 0 and 1. | |
4 * Version 1.4 | |
5 * | |
6 * AUTHOR: Steven Goodwin (StevenGoodwin@gmail.com) | |
7 * Copyright 1998-2010, Steven Goodwin | |
8 * | |
9 * This program is free software; you can redistribute it and/or | |
10 * modify it under the terms of the GNU General Public License as | |
11 * published by the Free Software Foundation; either version 2 of | |
12 * the License,or (at your option) any later version. | |
13 * | |
14 * This program is distributed in the hope that it will be useful, | |
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 * GNU General Public License for more details. | |
18 * | |
19 * You should have received a copy of the GNU General Public License | |
20 * along with this program; if not, write to the Free Software | |
21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
22 */ | |
23 | |
37
1db62040204e
Combine some headers to single mplatform.h
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
24 #include "mplatform.h" |
0 | 25 #include <stdio.h> |
26 #include <stdlib.h> | |
27 #include <string.h> | |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
28 #include <stdarg.h> |
0 | 29 #include "midifile.h" |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
30 |
0 | 31 |
32 /* | |
33 ** Internal Data Structures | |
34 */ | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
35 typedef struct |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
36 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
37 Uint8 note, chn; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
38 Uint8 valid, p2; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
39 Uint32 end_pos; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
40 } MIDI_LAST_NOTE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
41 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
42 typedef struct |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
43 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
44 Uint8 *ptr; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
45 Uint8 *pBase; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
46 Uint8 *pEnd; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
47 |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
48 Uint32 pos; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
49 Uint32 dt; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
50 /* For Reading MIDI Files */ |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
51 Uint32 sz; /* size of whole iTrack */ |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
52 /* For Writing MIDI Files */ |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
53 Uint32 iBlockSize; /* max size of track */ |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
54 Uint8 iDefaultChannel; /* use for write only */ |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
55 Uint8 last_status; /* used for running status */ |
0 | 56 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
57 MIDI_LAST_NOTE LastNote[MAX_TRACK_POLYPHONY]; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
58 } MIDI_FILE_TRACK; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
59 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
60 typedef struct |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
61 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
62 Uint32 iHeaderSize; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
63 /**/ Uint16 iVersion; /* 0, 1 or 2 */ |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
64 Uint16 iNumTracks; /* number of tracks... (will be 1 for MIDI type 0) */ |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
65 Uint16 PPQN; /* pulses per quarter note */ |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
66 } MIDI_HEADER; |
0 | 67 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
68 typedef struct |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
69 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
70 FILE *pFile; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
71 BOOL bOpenForWriting; |
0 | 72 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
73 MIDI_HEADER Header; |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
74 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
75 Uint8 *ptr, *curr, *end; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
76 size_t file_size; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
77 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
78 MIDI_FILE_TRACK Track[MAX_MIDI_TRACKS]; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
79 } _MIDI_FILE; |
0 | 80 |
81 | |
82 /* | |
83 ** Internal Functions | |
84 */ | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
85 #define DT_DEF 32 /* assume maximum delta-time + msg is no more than 32 bytes */ |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
86 #define _VAR_CAST _MIDI_FILE *pMF = (_MIDI_FILE *)_pMF |
0 | 87 #define IsFilePtrValid(pMF) (pMF) |
88 #define IsTrackValid(_x) (_midiValidateTrack(pMF, _x)) | |
89 #define IsChannelValid(_x) ((_x)>=1 && (_x)<=16) | |
90 #define IsNoteValid(_x) ((_x)>=0 && (_x)<128) | |
91 #define IsMessageValid(_x) ((_x)>=msgNoteOff && (_x)<=msgMetaEvent) | |
92 | |
93 | |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
94 static void midiErrorV(_MIDI_FILE *pMF, const char *fmt, va_list ap) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
95 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
96 printf("MIDI: "); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
97 vprintf(fmt, ap); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
98 } |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
99 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
100 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
101 static void midiError(_MIDI_FILE *pMF, const char *fmt, ...) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
102 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
103 va_list ap; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
104 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
105 va_start(ap, fmt); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
106 midiErrorV(pMF, fmt, ap); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
107 va_end(ap); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
108 } |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
109 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
110 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
111 static int midiStrNCmp(_MIDI_FILE *pMF, const char *str, const size_t n) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
112 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
113 if (pMF->curr + n < pMF->end) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
114 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
115 int res = strncmp((char *) pMF->curr, str, n); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
116 pMF->curr += n; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
117 return res; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
118 } |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
119 else |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
120 return 1; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
121 } |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
122 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
123 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
124 static BOOL midiSkip(_MIDI_FILE *pMF, const size_t n) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
125 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
126 pMF->curr += n; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
127 return (pMF->curr < pMF->end); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
128 } |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
129 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
130 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
131 static BOOL midiGetBE32(_MIDI_FILE *pMF, Uint32 *val) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
132 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
133 if (pMF->curr + sizeof(Uint32) < pMF->end) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
134 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
135 Uint32 tmp; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
136 memcpy(&tmp, pMF->curr, sizeof(Uint32)); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
137 *val = DM_BE32_TO_NATIVE(tmp); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
138 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
139 pMF->curr += sizeof(Uint32); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
140 return TRUE; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
141 } |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
142 else |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
143 return FALSE; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
144 } |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
145 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
146 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
147 static BOOL midiGetBE16(_MIDI_FILE *pMF, Uint16 *val) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
148 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
149 if (pMF->curr + sizeof(Uint16) < pMF->end) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
150 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
151 Uint16 tmp; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
152 memcpy(&tmp, pMF->curr, sizeof(Uint16)); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
153 *val = DM_BE16_TO_NATIVE(tmp); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
154 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
155 pMF->curr += sizeof(Uint16); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
156 return TRUE; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
157 } |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
158 else |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
159 return FALSE; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
160 } |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
161 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
162 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
163 static BOOL midiGetByte(_MIDI_FILE *pMF, Uint8 *val) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
164 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
165 if (pMF->curr + sizeof(Uint8) < pMF->end) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
166 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
167 memcpy(val, pMF->curr, sizeof(Uint8)); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
168 pMF->curr += sizeof(Uint8); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
169 return TRUE; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
170 } |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
171 else |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
172 return FALSE; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
173 } |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
174 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
175 |
30
26741527f3b7
Add midiFree() utility function.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
176 static void midiFree(void *ptr) |
26741527f3b7
Add midiFree() utility function.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
177 { |
26741527f3b7
Add midiFree() utility function.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
178 if (ptr != NULL) |
26741527f3b7
Add midiFree() utility function.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
179 free(ptr); |
26741527f3b7
Add midiFree() utility function.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
180 } |
26741527f3b7
Add midiFree() utility function.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
181 |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
182 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
183 static BOOL midiWriteBE32(FILE *fp, const Uint32 val) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
184 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
185 Uint32 result = DM_NATIVE_TO_BE32(val); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
186 return (fwrite(&result, sizeof(result), 1, fp) == 1); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
187 } |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
188 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
189 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
190 static BOOL midiWriteBE16(FILE *fp, const Uint16 val) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
191 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
192 Uint16 result = DM_NATIVE_TO_BE16(val); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
193 return (fwrite(&result, sizeof(result), 1, fp) == 1); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
194 } |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
195 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
196 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
197 static BOOL midiWriteByte(FILE *fp, const Uint8 val) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
198 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
199 return fputc(val, fp) == val; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
200 } |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
201 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
202 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
203 static BOOL midiWriteData(FILE *fp, const Uint8 *data, const size_t n) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
204 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
205 return fwrite(data, sizeof(Uint8), n, fp) == n; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
206 } |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
207 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
208 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
209 static BOOL midiWriteStr(FILE *fp, const char *str) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
210 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
211 size_t len = strlen(str); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
212 return fwrite(str, sizeof(char), strlen(str), fp) == len; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
213 } |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
214 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
215 |
0 | 216 static BOOL _midiValidateTrack(const _MIDI_FILE *pMF, int iTrack) |
217 { | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
218 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
219 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
220 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
221 if (pMF->bOpenForWriting) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
222 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
223 if (iTrack < 0 || iTrack >= MAX_MIDI_TRACKS) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
224 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
225 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
226 else /* open for reading */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
227 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
228 if (!pMF->ptr) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
229 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
230 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
231 if (iTrack < 0 || iTrack >= pMF->Header.iNumTracks) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
232 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
233 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
234 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
235 return TRUE; |
0 | 236 } |
237 | |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
238 static Uint8 *_midiWriteVarLen(Uint8 * ptr, int n) |
0 | 239 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
240 register long buffer; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
241 register long value = n; |
0 | 242 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
243 buffer = value & 0x7f; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
244 while ((value >>= 7) > 0) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
245 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
246 buffer <<= 8; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
247 buffer |= 0x80; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
248 buffer += (value & 0x7f); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
249 } |
0 | 250 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
251 while (TRUE) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
252 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
253 *ptr++ = (Uint8) buffer; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
254 if (buffer & 0x80) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
255 buffer >>= 8; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
256 else |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
257 break; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
258 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
259 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
260 return (ptr); |
0 | 261 } |
262 | |
263 /* Return a ptr to valid block of memory to store a message | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
264 ** of up to sz_reqd bytes |
0 | 265 */ |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
266 static Uint8 *_midiGetPtr(_MIDI_FILE *pMF, int iTrack, int sz_reqd) |
0 | 267 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
268 const Uint32 mem_sz_inc = 8092; /* arbitary */ |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
269 Uint8 *ptr; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
270 int curr_offset; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
271 MIDI_FILE_TRACK *pTrack = &pMF->Track[iTrack]; |
0 | 272 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
273 ptr = pTrack->ptr; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
274 if (ptr == NULL || ptr + sz_reqd > pTrack->pEnd) /* need more RAM! */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
275 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
276 curr_offset = ptr - pTrack->pBase; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
277 if ((ptr = |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
278 (Uint8 *) realloc(pTrack->pBase, |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
279 mem_sz_inc + pTrack->iBlockSize))) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
280 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
281 pTrack->pBase = ptr; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
282 pTrack->iBlockSize += mem_sz_inc; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
283 pTrack->pEnd = ptr + pTrack->iBlockSize; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
284 /* Move new ptr to continue data entry: */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
285 pTrack->ptr = ptr + curr_offset; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
286 ptr += curr_offset; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
287 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
288 else |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
289 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
290 /* NO MEMORY LEFT */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
291 return NULL; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
292 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
293 } |
0 | 294 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
295 return ptr; |
0 | 296 } |
297 | |
298 | |
299 static int _midiGetLength(int ppqn, int iNoteLen, BOOL bOverride) | |
300 { | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
301 int length = ppqn; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
302 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
303 if (bOverride) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
304 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
305 length = iNoteLen; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
306 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
307 else |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
308 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
309 switch (iNoteLen) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
310 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
311 case MIDI_NOTE_DOTTED_MINIM: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
312 length *= 3; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
313 break; |
0 | 314 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
315 case MIDI_NOTE_DOTTED_CROCHET: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
316 length *= 3; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
317 length /= 2; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
318 break; |
0 | 319 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
320 case MIDI_NOTE_DOTTED_QUAVER: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
321 length *= 3; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
322 length /= 4; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
323 break; |
0 | 324 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
325 case MIDI_NOTE_DOTTED_SEMIQUAVER: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
326 length *= 3; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
327 length /= 8; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
328 break; |
0 | 329 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
330 case MIDI_NOTE_DOTTED_SEMIDEMIQUAVER: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
331 length *= 3; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
332 length /= 16; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
333 break; |
0 | 334 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
335 case MIDI_NOTE_BREVE: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
336 length *= 4; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
337 break; |
0 | 338 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
339 case MIDI_NOTE_MINIM: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
340 length *= 2; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
341 break; |
0 | 342 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
343 case MIDI_NOTE_QUAVER: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
344 length /= 2; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
345 break; |
0 | 346 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
347 case MIDI_NOTE_SEMIQUAVER: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
348 length /= 4; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
349 break; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
350 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
351 case MIDI_NOTE_SEMIDEMIQUAVER: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
352 length /= 8; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
353 break; |
0 | 354 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
355 case MIDI_NOTE_TRIPLE_CROCHET: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
356 length *= 2; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
357 length /= 3; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
358 break; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
359 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
360 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
361 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
362 return length; |
0 | 363 } |
364 | |
365 /* | |
366 ** midiFile* Functions | |
367 */ | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
368 MIDI_FILE *midiFileCreate(const char *pFilename, BOOL bOverwriteIfExists) |
0 | 369 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
370 _MIDI_FILE *pMF = (_MIDI_FILE *) malloc(sizeof(_MIDI_FILE)); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
371 int i; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
372 |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
373 if (pMF == NULL) |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
374 return NULL; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
375 |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
376 if (!bOverwriteIfExists && (pMF->pFile = fopen(pFilename, "r")) != NULL) |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
377 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
378 fclose(pMF->pFile); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
379 midiFree(pMF); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
380 return NULL; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
381 } |
0 | 382 |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
383 if ((pMF->pFile = fopen(pFilename, "wb+")) == NULL) |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
384 { |
30
26741527f3b7
Add midiFree() utility function.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
385 midiFree(pMF); |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
386 return NULL; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
387 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
388 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
389 pMF->bOpenForWriting = TRUE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
390 pMF->Header.PPQN = MIDI_PPQN_DEFAULT; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
391 pMF->Header.iVersion = MIDI_VERSION_DEFAULT; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
392 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
393 for (i = 0; i < MAX_MIDI_TRACKS; ++i) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
394 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
395 pMF->Track[i].pos = 0; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
396 pMF->Track[i].ptr = NULL; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
397 pMF->Track[i].pBase = NULL; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
398 pMF->Track[i].pEnd = NULL; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
399 pMF->Track[i].iBlockSize = 0; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
400 pMF->Track[i].dt = 0; |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
401 pMF->Track[i].iDefaultChannel = (Uint8) (i & 0xf); |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
402 |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
403 memset(pMF->Track[i].LastNote, 0, sizeof(pMF->Track[i].LastNote)); |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
404 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
405 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
406 return (MIDI_FILE *) pMF; |
0 | 407 } |
408 | |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
409 int midiFileSetTracksDefaultChannel(MIDI_FILE *_pMF, int iTrack, int iChannel) |
0 | 410 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
411 int prev; |
0 | 412 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
413 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
414 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
415 return 0; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
416 if (!IsTrackValid(iTrack)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
417 return 0; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
418 if (!IsChannelValid(iChannel)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
419 return 0; |
0 | 420 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
421 /* For programmer each, iChannel is between 1 & 16 - but MIDI uses |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
422 ** 0-15. Thus, the fudge factor of 1 :) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
423 */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
424 prev = pMF->Track[iTrack].iDefaultChannel + 1; |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
425 pMF->Track[iTrack].iDefaultChannel = (Uint8) (iChannel - 1); |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
426 return prev; |
0 | 427 } |
428 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
429 int midiFileGetTracksDefaultChannel(const MIDI_FILE *_pMF, int iTrack) |
0 | 430 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
431 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
432 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
433 return 0; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
434 if (!IsTrackValid(iTrack)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
435 return 0; |
0 | 436 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
437 return pMF->Track[iTrack].iDefaultChannel + 1; |
0 | 438 } |
439 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
440 int midiFileSetPPQN(MIDI_FILE *_pMF, int PPQN) |
0 | 441 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
442 int prev; |
0 | 443 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
444 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
445 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
446 return MIDI_PPQN_DEFAULT; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
447 prev = pMF->Header.PPQN; |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
448 pMF->Header.PPQN = (Uint16) PPQN; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
449 return prev; |
0 | 450 } |
451 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
452 int midiFileGetPPQN(const MIDI_FILE *_pMF) |
0 | 453 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
454 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
455 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
456 return MIDI_PPQN_DEFAULT; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
457 return (int) pMF->Header.PPQN; |
0 | 458 } |
459 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
460 int midiFileSetVersion(MIDI_FILE *_pMF, int iVersion) |
0 | 461 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
462 int prev; |
0 | 463 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
464 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
465 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
466 return MIDI_VERSION_DEFAULT; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
467 if (iVersion < 0 || iVersion > 2) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
468 return MIDI_VERSION_DEFAULT; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
469 prev = pMF->Header.iVersion; |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
470 pMF->Header.iVersion = (Uint16) iVersion; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
471 return prev; |
0 | 472 } |
473 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
474 int midiFileGetVersion(const MIDI_FILE *_pMF) |
0 | 475 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
476 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
477 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
478 return MIDI_VERSION_DEFAULT; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
479 return pMF->Header.iVersion; |
0 | 480 } |
481 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
482 MIDI_FILE *midiFileOpen(const char *pFilename) |
0 | 483 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
484 _MIDI_FILE *pMF = NULL; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
485 BOOL bValidFile = FALSE; |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
486 FILE *fp; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
487 int i; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
488 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
489 if ((fp = fopen(pFilename, "rb")) == NULL) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
490 goto error; |
0 | 491 |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
492 if ((pMF = (_MIDI_FILE *) malloc(sizeof(_MIDI_FILE))) == NULL) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
493 goto error; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
494 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
495 fseek(fp, 0L, SEEK_END); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
496 pMF->file_size = ftell(fp); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
497 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
498 if ((pMF->curr = pMF->ptr = (Uint8 *) malloc(pMF->file_size)) == NULL) |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
499 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
500 midiError(pMF, "Could not allocate %d bytes for MIDI file.\n", pMF->file_size); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
501 goto error; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
502 } |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
503 |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
504 fseek(fp, 0L, SEEK_SET); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
505 if (fread(pMF->ptr, sizeof(Uint8), pMF->file_size, fp) != pMF->file_size) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
506 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
507 midiError(pMF, "Error reading file data.\n"); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
508 goto error; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
509 } |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
510 |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
511 /* Is this a valid MIDI file ? */ |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
512 if (midiStrNCmp(pMF, "MThd", 4) != 0) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
513 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
514 midiError(pMF, "Not a MIDI file.\n"); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
515 goto error; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
516 } |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
517 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
518 midiSkip(pMF, 4); |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
519 |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
520 if (!midiGetBE32(pMF, &pMF->Header.iHeaderSize) || |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
521 !midiGetBE16(pMF, &pMF->Header.iVersion) || |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
522 !midiGetBE16(pMF, &pMF->Header.iNumTracks) || |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
523 !midiGetBE16(pMF, &pMF->Header.PPQN)) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
524 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
525 midiError(pMF, "Error reading MIDI file header.\n"); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
526 goto error; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
527 } |
0 | 528 |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
529 midiSkip(pMF, pMF->Header.iHeaderSize + 8); |
0 | 530 |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
531 /* |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
532 ** Get all tracks |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
533 */ |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
534 for (i = 0; i < MAX_MIDI_TRACKS; ++i) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
535 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
536 pMF->Track[i].pos = 0; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
537 pMF->Track[i].last_status = 0; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
538 } |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
539 |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
540 for (i = 0; i < pMF->Header.iNumTracks; ++i) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
541 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
542 if (midiStrNCmp(pMF, "MTrk", 4) != 0) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
543 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
544 midiError(pMF, "Expected track %d data, not found.\n", i); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
545 goto error; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
546 } |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
547 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
548 pMF->Track[i].pBase = pMF->curr; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
549 pMF->Track[i].ptr = pMF->curr + 8; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
550 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
551 midiSkip(pMF, 4); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
552 if (!midiGetBE32(pMF, &pMF->Track[i].sz)) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
553 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
554 midiError(pMF, "Could not read MTrk size.\n"); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
555 goto error; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
556 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
557 |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
558 midiSkip(pMF, 4); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
559 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
560 pMF->Track[i].pEnd = pMF->curr + pMF->Track[i].sz; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
561 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
562 midiSkip(pMF, pMF->Track[i].sz); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
563 } |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
564 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
565 pMF->bOpenForWriting = FALSE; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
566 pMF->pFile = NULL; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
567 bValidFile = TRUE; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
568 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
569 |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
570 error: |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
571 // Cleanup |
31 | 572 if (fp != NULL) |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
573 fclose(fp); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
574 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
575 if (!bValidFile) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
576 { |
30
26741527f3b7
Add midiFree() utility function.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
577 midiFree(pMF); |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
578 return NULL; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
579 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
580 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
581 return (MIDI_FILE *) pMF; |
0 | 582 } |
583 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
584 typedef struct |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
585 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
586 int iIdx; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
587 int iEndPos; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
588 } MIDI_END_POINT; |
0 | 589 |
590 static int qs_cmp_pEndPoints(const void *e1, const void *e2) | |
591 { | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
592 MIDI_END_POINT *p1 = (MIDI_END_POINT *) e1; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
593 MIDI_END_POINT *p2 = (MIDI_END_POINT *) e2; |
0 | 594 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
595 return p1->iEndPos - p2->iEndPos; |
0 | 596 } |
597 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
598 BOOL midiFileFlushTrack(MIDI_FILE *_pMF, int iTrack, BOOL bFlushToEnd, |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
599 Uint32 dwEndTimePos) |
0 | 600 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
601 size_t sz, i; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
602 Uint8 *ptr; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
603 MIDI_END_POINT *pEndPoints; |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
604 int num, mx_pts; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
605 BOOL bNoChanges = TRUE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
606 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
607 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
608 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
609 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
610 if (!_midiValidateTrack(pMF, iTrack)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
611 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
612 sz = sizeof(pMF->Track[0].LastNote) / sizeof(pMF->Track[0].LastNote[0]); |
0 | 613 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
614 /* |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
615 ** Flush all |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
616 */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
617 pEndPoints = (MIDI_END_POINT *) malloc(sz * sizeof(MIDI_END_POINT)); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
618 mx_pts = 0; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
619 for (i = 0; i < sz; ++i) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
620 if (pMF->Track[iTrack].LastNote[i].valid) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
621 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
622 pEndPoints[mx_pts].iIdx = i; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
623 pEndPoints[mx_pts].iEndPos = |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
624 pMF->Track[iTrack].LastNote[i].end_pos; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
625 mx_pts++; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
626 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
627 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
628 if (bFlushToEnd) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
629 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
630 if (mx_pts) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
631 dwEndTimePos = pEndPoints[mx_pts - 1].iEndPos; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
632 else |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
633 dwEndTimePos = pMF->Track[iTrack].pos; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
634 } |
0 | 635 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
636 if (mx_pts) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
637 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
638 /* Sort, smallest first, and add the note off msgs */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
639 qsort(pEndPoints, mx_pts, sizeof(MIDI_END_POINT), qs_cmp_pEndPoints); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
640 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
641 i = 0; |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
642 while ((dwEndTimePos >= (Uint32) pEndPoints[i].iEndPos || bFlushToEnd) |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
643 && i < mx_pts) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
644 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
645 ptr = _midiGetPtr(pMF, iTrack, DT_DEF); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
646 if (!ptr) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
647 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
648 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
649 num = pEndPoints[i].iIdx; /* get 'LastNote' index */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
650 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
651 ptr = |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
652 _midiWriteVarLen(ptr, |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
653 pMF->Track[iTrack].LastNote[num].end_pos - |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
654 pMF->Track[iTrack].pos); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
655 /* msgNoteOn msgNoteOff */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
656 *ptr++ = |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
657 (Uint8) (msgNoteOff | pMF->Track[iTrack].LastNote[num].chn); |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
658 *ptr++ = pMF->Track[iTrack].LastNote[num].note; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
659 *ptr++ = 0; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
660 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
661 pMF->Track[iTrack].LastNote[num].valid = FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
662 pMF->Track[iTrack].pos = pMF->Track[iTrack].LastNote[num].end_pos; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
663 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
664 pMF->Track[iTrack].ptr = ptr; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
665 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
666 ++i; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
667 bNoChanges = FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
668 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
669 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
670 |
30
26741527f3b7
Add midiFree() utility function.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
671 midiFree(pEndPoints); |
26741527f3b7
Add midiFree() utility function.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
672 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
673 /* |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
674 ** Re-calc current position |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
675 */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
676 pMF->Track[iTrack].dt = dwEndTimePos - pMF->Track[iTrack].pos; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
677 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
678 return TRUE; |
0 | 679 } |
680 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
681 BOOL midiFileSyncTracks(MIDI_FILE *_pMF, int iTrack1, int iTrack2) |
0 | 682 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
683 int p1, p2; |
0 | 684 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
685 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
686 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
687 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
688 if (!IsTrackValid(iTrack1)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
689 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
690 if (!IsTrackValid(iTrack2)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
691 return FALSE; |
0 | 692 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
693 p1 = pMF->Track[iTrack1].pos + pMF->Track[iTrack1].dt; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
694 p2 = pMF->Track[iTrack2].pos + pMF->Track[iTrack2].dt; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
695 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
696 if (p1 < p2) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
697 midiTrackIncTime(pMF, iTrack1, p2 - p1, TRUE); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
698 else if (p2 < p1) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
699 midiTrackIncTime(pMF, iTrack2, p1 - p2, TRUE); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
700 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
701 return TRUE; |
0 | 702 } |
703 | |
704 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
705 BOOL midiFileClose(MIDI_FILE *_pMF) |
0 | 706 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
707 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
708 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
709 return FALSE; |
0 | 710 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
711 if (pMF->bOpenForWriting) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
712 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
713 Uint16 iNumTracks = 0; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
714 int i; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
715 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
716 /* Flush our buffers */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
717 for (i = 0; i < MAX_MIDI_TRACKS; ++i) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
718 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
719 if (pMF->Track[i].ptr) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
720 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
721 midiSongAddEndSequence(pMF, i); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
722 midiFileFlushTrack(pMF, i, TRUE, 0); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
723 iNumTracks++; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
724 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
725 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
726 /* |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
727 ** Header |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
728 */ |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
729 if (!midiWriteStr(pMF->pFile, "MThd") || |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
730 !midiWriteBE32(pMF->pFile, 6) || |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
731 !midiWriteBE16(pMF->pFile, iNumTracks == 1 ? pMF->Header.iVersion : 1) || |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
732 !midiWriteBE16(pMF->pFile, iNumTracks) || |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
733 !midiWriteBE16(pMF->pFile, pMF->Header.PPQN)) |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
734 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
735 midiError(pMF, "Could not write MThd header.\n"); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
736 goto error; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
737 } |
0 | 738 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
739 /* |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
740 ** Track data |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
741 */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
742 for (i = 0; i < MAX_MIDI_TRACKS; ++i) |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
743 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
744 if (pMF->Track[i].ptr) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
745 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
746 size_t sz = pMF->Track[i].ptr - pMF->Track[i].pBase; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
747 if (!midiWriteStr(pMF->pFile, "MTrk") || |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
748 !midiWriteBE32(pMF->pFile, sz) || |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
749 !midiWriteData(pMF->pFile, pMF->Track[i].pBase, sz)) |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
750 { |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
751 midiError(pMF, "Could not write track #%d data.\n", i); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
752 goto error; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
753 } |
0 | 754 |
30
26741527f3b7
Add midiFree() utility function.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
755 midiFree(pMF->Track[i].pBase); |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
756 } |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
757 } |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
758 } |
0 | 759 |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
760 error: |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
761 if (pMF->pFile != NULL) |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
762 return fclose(pMF->pFile) ? FALSE : TRUE; |
30
26741527f3b7
Add midiFree() utility function.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
763 |
26741527f3b7
Add midiFree() utility function.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
764 midiFree(pMF); |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
765 return TRUE; |
0 | 766 } |
767 | |
768 | |
769 /* | |
770 ** midiSong* Functions | |
771 */ | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
772 BOOL midiSongAddSMPTEOffset(MIDI_FILE *_pMF, int iTrack, int iHours, |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
773 int iMins, int iSecs, int iFrames, int iFFrames) |
0 | 774 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
775 static Uint8 tmp[] = |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
776 { msgMetaEvent, metaSMPTEOffset, 0x05, 0, 0, 0, 0, 0 }; |
0 | 777 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
778 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
779 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
780 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
781 if (!IsTrackValid(iTrack)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
782 return FALSE; |
0 | 783 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
784 if (iMins < 0 || iMins > 59) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
785 iMins = 0; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
786 if (iSecs < 0 || iSecs > 59) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
787 iSecs = 0; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
788 if (iFrames < 0 || iFrames > 24) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
789 iFrames = 0; |
0 | 790 |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
791 tmp[3] = (Uint8) iHours; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
792 tmp[4] = (Uint8) iMins; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
793 tmp[5] = (Uint8) iSecs; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
794 tmp[6] = (Uint8) iFrames; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
795 tmp[7] = (Uint8) iFFrames; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
796 return midiTrackAddRaw(pMF, iTrack, sizeof(tmp), tmp, FALSE, 0); |
0 | 797 } |
798 | |
799 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
800 BOOL midiSongAddSimpleTimeSig(MIDI_FILE *_pMF, int iTrack, int iNom, |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
801 int iDenom) |
0 | 802 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
803 return midiSongAddTimeSig(_pMF, iTrack, iNom, iDenom, 24, 8); |
0 | 804 } |
805 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
806 BOOL midiSongAddTimeSig(MIDI_FILE *_pMF, int iTrack, int iNom, int iDenom, |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
807 int iClockInMetroTick, int iNotated32nds) |
0 | 808 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
809 static Uint8 tmp[] = { msgMetaEvent, metaTimeSig, 0x04, 0, 0, 0, 0 }; |
0 | 810 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
811 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
812 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
813 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
814 if (!IsTrackValid(iTrack)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
815 return FALSE; |
0 | 816 |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
817 tmp[3] = (Uint8) iNom; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
818 tmp[4] = (Uint8) (MIDI_NOTE_MINIM / iDenom); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
819 tmp[5] = (Uint8) iClockInMetroTick; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
820 tmp[6] = (Uint8) iNotated32nds; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
821 return midiTrackAddRaw(pMF, iTrack, sizeof(tmp), tmp, FALSE, 0); |
0 | 822 } |
823 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
824 BOOL midiSongAddKeySig(MIDI_FILE *_pMF, int iTrack, tMIDI_KEYSIG iKey) |
0 | 825 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
826 static Uint8 tmp[] = { msgMetaEvent, metaKeySig, 0x02, 0, 0 }; |
0 | 827 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
828 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
829 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
830 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
831 if (!IsTrackValid(iTrack)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
832 return FALSE; |
0 | 833 |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
834 tmp[3] = (Uint8) ((iKey & keyMaskKey) * ((iKey & keyMaskNeg) ? -1 : 1)); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
835 tmp[4] = (Uint8) ((iKey & keyMaskMin) ? 1 : 0); |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
836 return midiTrackAddRaw(pMF, iTrack, sizeof(tmp), tmp, FALSE, 0); |
0 | 837 } |
838 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
839 BOOL midiSongAddTempo(MIDI_FILE *_pMF, int iTrack, int iTempo) |
0 | 840 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
841 static Uint8 tmp[] = { msgMetaEvent, metaSetTempo, 0x03, 0, 0, 0 }; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
842 int us; /* micro-seconds per qn */ |
0 | 843 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
844 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
845 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
846 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
847 if (!IsTrackValid(iTrack)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
848 return FALSE; |
0 | 849 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
850 us = 60000000L / iTempo; |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
851 tmp[3] = (Uint8) ((us >> 16) & 0xff); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
852 tmp[4] = (Uint8) ((us >> 8) & 0xff); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
853 tmp[5] = (Uint8) ((us >> 0) & 0xff); |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
854 return midiTrackAddRaw(pMF, iTrack, sizeof(tmp), tmp, FALSE, 0); |
0 | 855 } |
856 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
857 BOOL midiSongAddMIDIPort(MIDI_FILE *_pMF, int iTrack, int iPort) |
0 | 858 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
859 static Uint8 tmp[] = { msgMetaEvent, metaMIDIPort, 1, 0 }; |
0 | 860 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
861 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
862 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
863 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
864 if (!IsTrackValid(iTrack)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
865 return FALSE; |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
866 tmp[3] = (Uint8) iPort; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
867 return midiTrackAddRaw(pMF, iTrack, sizeof(tmp), tmp, FALSE, 0); |
0 | 868 } |
869 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
870 BOOL midiSongAddEndSequence(MIDI_FILE *_pMF, int iTrack) |
0 | 871 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
872 static Uint8 tmp[] = { msgMetaEvent, metaEndSequence, 0 }; |
0 | 873 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
874 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
875 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
876 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
877 if (!IsTrackValid(iTrack)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
878 return FALSE; |
0 | 879 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
880 return midiTrackAddRaw(pMF, iTrack, sizeof(tmp), tmp, FALSE, 0); |
0 | 881 } |
882 | |
883 | |
884 /* | |
885 ** midiTrack* Functions | |
886 */ | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
887 BOOL midiTrackAddRaw(MIDI_FILE *_pMF, int iTrack, int data_sz, |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
888 const Uint8 * pData, BOOL bMovePtr, int dt) |
0 | 889 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
890 MIDI_FILE_TRACK *pTrk; |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
891 Uint8 *ptr; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
892 int dtime; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
893 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
894 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
895 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
896 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
897 if (!IsTrackValid(iTrack)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
898 return FALSE; |
0 | 899 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
900 pTrk = &pMF->Track[iTrack]; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
901 ptr = _midiGetPtr(pMF, iTrack, data_sz + DT_DEF); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
902 if (!ptr) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
903 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
904 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
905 dtime = pTrk->dt; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
906 if (bMovePtr) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
907 dtime += dt; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
908 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
909 ptr = _midiWriteVarLen(ptr, dtime); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
910 memcpy(ptr, pData, data_sz); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
911 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
912 pTrk->pos += dtime; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
913 pTrk->dt = 0; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
914 pTrk->ptr = ptr + data_sz; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
915 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
916 return TRUE; |
0 | 917 } |
918 | |
919 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
920 BOOL midiTrackIncTime(MIDI_FILE *_pMF, int iTrack, int iDeltaTime, |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
921 BOOL bOverridePPQN) |
0 | 922 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
923 Uint32 will_end_at; |
0 | 924 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
925 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
926 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
927 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
928 if (!IsTrackValid(iTrack)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
929 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
930 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
931 will_end_at = _midiGetLength(pMF->Header.PPQN, iDeltaTime, bOverridePPQN); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
932 will_end_at += pMF->Track[iTrack].pos + pMF->Track[iTrack].dt; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
933 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
934 midiFileFlushTrack(pMF, iTrack, FALSE, will_end_at); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
935 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
936 return TRUE; |
0 | 937 } |
938 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
939 BOOL midiTrackAddText(MIDI_FILE *_pMF, int iTrack, tMIDI_TEXT iType, |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
940 const char *pTxt) |
0 | 941 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
942 Uint8 *ptr; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
943 int sz; |
0 | 944 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
945 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
946 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
947 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
948 if (!IsTrackValid(iTrack)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
949 return FALSE; |
0 | 950 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
951 sz = strlen(pTxt); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
952 if ((ptr = _midiGetPtr(pMF, iTrack, sz + DT_DEF))) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
953 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
954 *ptr++ = 0; /* delta-time=0 */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
955 *ptr++ = msgMetaEvent; |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
956 *ptr++ = (Uint8) iType; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
957 ptr = _midiWriteVarLen((Uint8 *) ptr, sz); |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
958 strcpy((char *) ptr, pTxt); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
959 pMF->Track[iTrack].ptr = ptr + sz; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
960 return TRUE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
961 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
962 else |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
963 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
964 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
965 } |
0 | 966 } |
967 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
968 BOOL midiTrackSetKeyPressure(MIDI_FILE *pMF, int iTrack, int iNote, |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
969 int iAftertouch) |
0 | 970 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
971 return midiTrackAddMsg(pMF, iTrack, msgNoteKeyPressure, iNote, |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
972 iAftertouch); |
0 | 973 } |
974 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
975 BOOL midiTrackAddControlChange(MIDI_FILE *pMF, int iTrack, tMIDI_CC iCCType, |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
976 int iParam) |
0 | 977 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
978 return midiTrackAddMsg(pMF, iTrack, msgControlChange, iCCType, iParam); |
0 | 979 } |
980 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
981 BOOL midiTrackAddProgramChange(MIDI_FILE *pMF, int iTrack, int iInstrPatch) |
0 | 982 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
983 return midiTrackAddMsg(pMF, iTrack, msgSetProgram, iInstrPatch, 0); |
0 | 984 } |
985 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
986 BOOL midiTrackChangeKeyPressure(MIDI_FILE *pMF, int iTrack, |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
987 int iDeltaPressure) |
0 | 988 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
989 return midiTrackAddMsg(pMF, iTrack, msgChangePressure, |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
990 iDeltaPressure & 0x7f, 0); |
0 | 991 } |
992 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
993 BOOL midiTrackSetPitchWheel(MIDI_FILE *pMF, int iTrack, int iWheelPos) |
0 | 994 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
995 Uint16 wheel = (Uint16) iWheelPos; |
0 | 996 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
997 /* bitshift 7 instead of eight because we're dealing with 7 bit numbers */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
998 wheel += MIDI_WHEEL_CENTRE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
999 return midiTrackAddMsg(pMF, iTrack, msgSetPitchWheel, wheel & 0x7f, |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1000 (wheel >> 7) & 0x7f); |
0 | 1001 } |
1002 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1003 BOOL midiTrackAddMsg(MIDI_FILE *_pMF, int iTrack, tMIDI_MSG iMsg, |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1004 int iParam1, int iParam2) |
0 | 1005 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1006 Uint8 *ptr; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1007 Uint8 data[3]; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1008 int sz; |
0 | 1009 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1010 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1011 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1012 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1013 if (!IsTrackValid(iTrack)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1014 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1015 if (!IsMessageValid(iMsg)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1016 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1017 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1018 ptr = _midiGetPtr(pMF, iTrack, DT_DEF); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1019 if (!ptr) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1020 return FALSE; |
0 | 1021 |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1022 data[0] = (Uint8) (iMsg | pMF->Track[iTrack].iDefaultChannel); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1023 data[1] = (Uint8) (iParam1 & 0x7f); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1024 data[2] = (Uint8) (iParam2 & 0x7f); |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1025 /* |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1026 ** Is this msg a single, or double Uint8, prm? |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1027 */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1028 switch (iMsg) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1029 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1030 case msgSetProgram: /* only one byte required for these msgs */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1031 case msgChangePressure: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1032 sz = 2; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1033 break; |
0 | 1034 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1035 default: /* double byte messages */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1036 sz = 3; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1037 break; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1038 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1039 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1040 return midiTrackAddRaw(pMF, iTrack, sz, data, FALSE, 0); |
0 | 1041 |
1042 } | |
1043 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1044 BOOL midiTrackAddNote(MIDI_FILE *_pMF, int iTrack, int iNote, int iLength, |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1045 int iVol, BOOL bAutoInc, BOOL bOverrideLength) |
0 | 1046 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1047 MIDI_FILE_TRACK *pTrk; |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1048 Uint8 *ptr; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1049 BOOL bSuccess = FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1050 int i, chn; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1051 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1052 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1053 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1054 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1055 if (!IsTrackValid(iTrack)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1056 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1057 if (!IsNoteValid(iNote)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1058 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1059 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1060 pTrk = &pMF->Track[iTrack]; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1061 ptr = _midiGetPtr(pMF, iTrack, DT_DEF); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1062 if (!ptr) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1063 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1064 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1065 chn = pTrk->iDefaultChannel; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1066 iLength = _midiGetLength(pMF->Header.PPQN, iLength, bOverrideLength); |
0 | 1067 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1068 for (i = 0; i < sizeof(pTrk->LastNote) / sizeof(pTrk->LastNote[0]); ++i) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1069 if (pTrk->LastNote[i].valid == FALSE) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1070 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1071 pTrk->LastNote[i].note = (Uint8) iNote; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1072 pTrk->LastNote[i].chn = (Uint8) chn; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1073 pTrk->LastNote[i].end_pos = pTrk->pos + pTrk->dt + iLength; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1074 pTrk->LastNote[i].valid = TRUE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1075 bSuccess = TRUE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1076 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1077 ptr = _midiWriteVarLen(ptr, pTrk->dt); /* delta-time */ |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1078 *ptr++ = (Uint8) (msgNoteOn | chn); |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1079 *ptr++ = (Uint8) iNote; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1080 *ptr++ = (Uint8) iVol; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1081 break; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1082 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1083 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1084 if (!bSuccess) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1085 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1086 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1087 pTrk->ptr = ptr; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1088 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1089 pTrk->pos += pTrk->dt; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1090 pTrk->dt = 0; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1091 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1092 if (bAutoInc) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1093 return midiTrackIncTime(pMF, iTrack, iLength, bOverrideLength); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1094 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1095 return TRUE; |
0 | 1096 } |
1097 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1098 BOOL midiTrackAddRest(MIDI_FILE *_pMF, int iTrack, int iLength, |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1099 BOOL bOverridePPQN) |
0 | 1100 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1101 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1102 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1103 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1104 if (!IsTrackValid(iTrack)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1105 return FALSE; |
0 | 1106 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1107 iLength = _midiGetLength(pMF->Header.PPQN, iLength, bOverridePPQN); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1108 return midiTrackIncTime(pMF, iTrack, iLength, bOverridePPQN); |
0 | 1109 } |
1110 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1111 int midiTrackGetEndPos(MIDI_FILE *_pMF, int iTrack) |
0 | 1112 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1113 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1114 if (!IsFilePtrValid(pMF)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1115 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1116 if (!IsTrackValid(iTrack)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1117 return FALSE; |
0 | 1118 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1119 return pMF->Track[iTrack].pos; |
0 | 1120 } |
1121 | |
1122 /* | |
1123 ** midiRead* Functions | |
1124 */ | |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1125 static Uint8 *_midiReadVarLen(Uint8 * ptr, Uint32 * num) |
0 | 1126 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1127 register Uint32 value; |
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1128 register Uint8 c; |
0 | 1129 |
1130 if ((value = *ptr++) & 0x80) | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1131 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1132 value &= 0x7f; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1133 do |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1134 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1135 value = (value << 7) + ((c = *ptr++) & 0x7f); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1136 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1137 while (c & 0x80); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1138 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1139 *num = value; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1140 return (ptr); |
0 | 1141 } |
1142 | |
1143 | |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1144 static BOOL _midiReadTrackCopyData(MIDI_MSG * pMsg, Uint8 * ptr, Uint32 sz, |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1145 BOOL bCopyPtrData) |
0 | 1146 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1147 if (sz > pMsg->data_sz) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1148 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1149 pMsg->data = (Uint8 *) realloc(pMsg->data, sz); |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1150 pMsg->data_sz = sz; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1151 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1152 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1153 if (!pMsg->data) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1154 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1155 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1156 if (bCopyPtrData && ptr) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1157 memcpy(pMsg->data, ptr, sz); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1158 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1159 return TRUE; |
0 | 1160 } |
1161 | |
1162 int midiReadGetNumTracks(const MIDI_FILE *_pMF) | |
1163 { | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1164 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1165 return pMF->Header.iNumTracks; |
0 | 1166 } |
1167 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1168 BOOL midiReadGetNextMessage(const MIDI_FILE *_pMF, int iTrack, |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1169 MIDI_MSG * pMsg) |
0 | 1170 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1171 MIDI_FILE_TRACK *pTrack; |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1172 Uint8 *bptr, *pMsgDataPtr; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1173 int sz; |
0 | 1174 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1175 _VAR_CAST; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1176 if (!IsTrackValid(iTrack)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1177 return FALSE; |
0 | 1178 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1179 pTrack = &pMF->Track[iTrack]; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1180 /* FIXME: Check if there is data on this track first!!! */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1181 if (pTrack->ptr >= pTrack->pEnd) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1182 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1183 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1184 pTrack->ptr = _midiReadVarLen(pTrack->ptr, &pMsg->dt); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1185 pTrack->pos += pMsg->dt; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1186 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1187 pMsg->dwAbsPos = pTrack->pos; |
0 | 1188 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1189 if (*pTrack->ptr & 0x80) /* Is this is sys message */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1190 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1191 pMsg->iType = (tMIDI_MSG) ((*pTrack->ptr) & 0xf0); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1192 pMsgDataPtr = pTrack->ptr + 1; |
0 | 1193 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1194 /* SysEx & Meta events don't carry channel info, but something |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1195 ** important in their lower bits that we must keep */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1196 if (pMsg->iType == 0xf0) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1197 pMsg->iType = (tMIDI_MSG) (*pTrack->ptr); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1198 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1199 else /* just data - so use the last msg type */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1200 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1201 pMsg->iType = pMsg->iLastMsgType; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1202 pMsgDataPtr = pTrack->ptr; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1203 } |
0 | 1204 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1205 pMsg->iLastMsgType = (tMIDI_MSG) pMsg->iType; |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1206 pMsg->iLastMsgChnl = (Uint8) ((*pTrack->ptr) & 0x0f) + 1; |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1207 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1208 switch (pMsg->iType) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1209 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1210 case msgNoteOn: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1211 pMsg->MsgData.NoteOn.iChannel = pMsg->iLastMsgChnl; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1212 pMsg->MsgData.NoteOn.iNote = *(pMsgDataPtr); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1213 pMsg->MsgData.NoteOn.iVolume = *(pMsgDataPtr + 1); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1214 pMsg->iMsgSize = 3; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1215 break; |
0 | 1216 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1217 case msgNoteOff: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1218 pMsg->MsgData.NoteOff.iChannel = pMsg->iLastMsgChnl; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1219 pMsg->MsgData.NoteOff.iNote = *(pMsgDataPtr); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1220 pMsg->iMsgSize = 3; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1221 break; |
0 | 1222 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1223 case msgNoteKeyPressure: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1224 pMsg->MsgData.NoteKeyPressure.iChannel = pMsg->iLastMsgChnl; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1225 pMsg->MsgData.NoteKeyPressure.iNote = *(pMsgDataPtr); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1226 pMsg->MsgData.NoteKeyPressure.iPressure = *(pMsgDataPtr + 1); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1227 pMsg->iMsgSize = 3; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1228 break; |
0 | 1229 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1230 case msgSetParameter: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1231 pMsg->MsgData.NoteParameter.iChannel = pMsg->iLastMsgChnl; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1232 pMsg->MsgData.NoteParameter.iControl = (tMIDI_CC) * (pMsgDataPtr); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1233 pMsg->MsgData.NoteParameter.iParam = *(pMsgDataPtr + 1); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1234 pMsg->iMsgSize = 3; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1235 break; |
0 | 1236 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1237 case msgSetProgram: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1238 pMsg->MsgData.ChangeProgram.iChannel = pMsg->iLastMsgChnl; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1239 pMsg->MsgData.ChangeProgram.iProgram = *(pMsgDataPtr); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1240 pMsg->iMsgSize = 2; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1241 break; |
0 | 1242 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1243 case msgChangePressure: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1244 pMsg->MsgData.ChangePressure.iChannel = pMsg->iLastMsgChnl; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1245 pMsg->MsgData.ChangePressure.iPressure = *(pMsgDataPtr); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1246 pMsg->iMsgSize = 2; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1247 break; |
0 | 1248 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1249 case msgSetPitchWheel: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1250 pMsg->MsgData.PitchWheel.iChannel = pMsg->iLastMsgChnl; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1251 pMsg->MsgData.PitchWheel.iPitch = |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1252 *(pMsgDataPtr) | (*(pMsgDataPtr + 1) << 7); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1253 pMsg->MsgData.PitchWheel.iPitch -= MIDI_WHEEL_CENTRE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1254 pMsg->iMsgSize = 3; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1255 break; |
0 | 1256 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1257 case msgMetaEvent: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1258 /* We can use 'pTrack->ptr' from now on, since meta events |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1259 ** always have bit 7 set */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1260 bptr = pTrack->ptr; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1261 pMsg->MsgData.MetaEvent.iType = (tMIDI_META) * (pTrack->ptr + 1); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1262 pTrack->ptr = _midiReadVarLen(pTrack->ptr + 2, &pMsg->iMsgSize); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1263 sz = (pTrack->ptr - bptr) + pMsg->iMsgSize; |
0 | 1264 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1265 if (_midiReadTrackCopyData(pMsg, pTrack->ptr, sz, FALSE) == FALSE) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1266 return FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1267 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1268 /* Now copy the data... */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1269 memcpy(pMsg->data, bptr, sz); |
0 | 1270 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1271 /* Now place it in a neat structure */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1272 switch (pMsg->MsgData.MetaEvent.iType) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1273 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1274 case metaMIDIPort: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1275 pMsg->MsgData.MetaEvent.Data.iMIDIPort = *(pTrack->ptr + 0); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1276 break; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1277 case metaSequenceNumber: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1278 pMsg->MsgData.MetaEvent.Data.iSequenceNumber = *(pTrack->ptr + 0); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1279 break; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1280 case metaTextEvent: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1281 case metaCopyright: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1282 case metaTrackName: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1283 case metaInstrument: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1284 case metaLyric: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1285 case metaMarker: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1286 case metaCuePoint: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1287 /* TODO - Add NULL terminator ??? */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1288 pMsg->MsgData.MetaEvent.Data.Text.pData = pTrack->ptr; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1289 break; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1290 case metaEndSequence: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1291 /* NO DATA */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1292 break; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1293 case metaSetTempo: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1294 { |
34
a14cc6c5d7ef
Possibly fix 64-bit issues. Probably not.
Matti Hamalainen <ccr@tnsp.org>
parents:
31
diff
changeset
|
1295 Uint32 us = |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1296 ((*(pTrack->ptr + 0)) << 16) | ((*(pTrack->ptr + 1)) << 8) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1297 | (*(pTrack->ptr + 2)); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1298 pMsg->MsgData.MetaEvent.Data.Tempo.iBPM = 60000000L / us; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1299 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1300 break; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1301 case metaSMPTEOffset: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1302 pMsg->MsgData.MetaEvent.Data.SMPTE.iHours = *(pTrack->ptr + 0); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1303 pMsg->MsgData.MetaEvent.Data.SMPTE.iMins = *(pTrack->ptr + 1); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1304 pMsg->MsgData.MetaEvent.Data.SMPTE.iSecs = *(pTrack->ptr + 2); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1305 pMsg->MsgData.MetaEvent.Data.SMPTE.iFrames = *(pTrack->ptr + 3); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1306 pMsg->MsgData.MetaEvent.Data.SMPTE.iFF = *(pTrack->ptr + 4); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1307 break; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1308 case metaTimeSig: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1309 pMsg->MsgData.MetaEvent.Data.TimeSig.iNom = *(pTrack->ptr + 0); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1310 pMsg->MsgData.MetaEvent.Data.TimeSig.iDenom = |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1311 *(pTrack->ptr + 1) * MIDI_NOTE_MINIM; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1312 /* TODO: Variations without 24 & 8 */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1313 break; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1314 case metaKeySig: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1315 if (*pTrack->ptr & 0x80) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1316 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1317 /* Do some trendy sign extending in reverse :) */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1318 pMsg->MsgData.MetaEvent.Data.KeySig.iKey = |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1319 ((256 - *pTrack->ptr) & keyMaskKey); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1320 pMsg->MsgData.MetaEvent.Data.KeySig.iKey |= keyMaskNeg; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1321 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1322 else |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1323 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1324 pMsg->MsgData.MetaEvent.Data.KeySig.iKey = |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1325 (tMIDI_KEYSIG) (*pTrack->ptr & keyMaskKey); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1326 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1327 if (*(pTrack->ptr + 1)) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1328 pMsg->MsgData.MetaEvent.Data.KeySig.iKey |= keyMaskMin; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1329 break; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1330 case metaSequencerSpecific: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1331 pMsg->MsgData.MetaEvent.Data.Sequencer.iSize = pMsg->iMsgSize; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1332 pMsg->MsgData.MetaEvent.Data.Sequencer.pData = pTrack->ptr; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1333 break; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1334 } |
0 | 1335 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1336 pTrack->ptr += pMsg->iMsgSize; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1337 pMsg->iMsgSize = sz; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1338 break; |
0 | 1339 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1340 case msgSysEx1: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1341 case msgSysEx2: |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1342 bptr = pTrack->ptr; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1343 pTrack->ptr = _midiReadVarLen(pTrack->ptr + 1, &pMsg->iMsgSize); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1344 sz = (pTrack->ptr - bptr) + pMsg->iMsgSize; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1345 |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1346 if (_midiReadTrackCopyData(pMsg, pTrack->ptr, sz, FALSE) == FALSE) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1347 return FALSE; |
0 | 1348 |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1349 /* Now copy the data... */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1350 memcpy(pMsg->data, bptr, sz); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1351 pTrack->ptr += pMsg->iMsgSize; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1352 pMsg->iMsgSize = sz; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1353 pMsg->MsgData.SysEx.pData = pMsg->data; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1354 pMsg->MsgData.SysEx.iSize = sz; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1355 break; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1356 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1357 /* |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1358 ** Standard MIDI messages use a common copy routine |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1359 */ |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1360 pMsg->bImpliedMsg = FALSE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1361 if ((pMsg->iType & 0xf0) != 0xf0) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1362 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1363 if (*pTrack->ptr & 0x80) |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1364 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1365 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1366 else |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1367 { |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1368 pMsg->bImpliedMsg = TRUE; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1369 pMsg->iImpliedMsg = pMsg->iLastMsgType; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1370 pMsg->iMsgSize--; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1371 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1372 _midiReadTrackCopyData(pMsg, pTrack->ptr, pMsg->iMsgSize, TRUE); |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1373 pTrack->ptr += pMsg->iMsgSize; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1374 } |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1375 return TRUE; |
0 | 1376 } |
1377 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1378 void midiReadInitMessage(MIDI_MSG * pMsg) |
0 | 1379 { |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1380 pMsg->data = NULL; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1381 pMsg->data_sz = 0; |
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1382 pMsg->bImpliedMsg = FALSE; |
0 | 1383 } |
1384 | |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1385 void midiReadFreeMessage(MIDI_MSG * pMsg) |
0 | 1386 { |
30
26741527f3b7
Add midiFree() utility function.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
1387 midiFree(pMsg->data); |
29
4df6d9714314
Automatic reindent/cleanup pass on the midi code.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
1388 pMsg->data = NULL; |
0 | 1389 } |