@@ -104,13 +104,13 @@ function Parse_Internal( midiData )
104
104
local ret = {}
105
105
local head = 1
106
106
107
- if not isSameTable ( byteArray ( head , 4 ), { 77 , 84 , 104 , 100 } ) then
107
+ if not isSameTable ( byteArray ( midiData , head , 4 ), { 77 , 84 , 104 , 100 } ) then
108
108
error ( " input data seems not to be valid MIDI data" )
109
109
end
110
110
head = head + 4 -- header chunk magic number
111
111
head = head + 4 -- header chunk length
112
112
113
- ret .format = bytesToNumber ( head , 2 )
113
+ ret .format = bytesToNumber ( midiData , head , 2 )
114
114
115
115
if not ( ret .format == 0 or ret .format == 1 ) then
116
116
error ( " not supported such format of MIDI" )
@@ -119,7 +119,7 @@ function Parse_Internal( midiData )
119
119
120
120
head = head + 2 -- trackCount
121
121
122
- ret .timebase = bytesToNumber ( head , 2 )
122
+ ret .timebase = bytesToNumber ( midiData , head , 2 )
123
123
head = head + 2 -- timeBase
124
124
125
125
---- --------------------
@@ -129,13 +129,13 @@ function Parse_Internal( midiData )
129
129
ret .tracks = {}
130
130
131
131
while head < string.len ( midiData ) do
132
- if not isSameTable ( byteArray ( head , 4 ), { 77 , 84 , 114 , 107 } ) then -- if chunk is not track chunk
132
+ if not isSameTable ( byteArray ( midiData , head , 4 ), { 77 , 84 , 114 , 107 } ) then -- if chunk is not track chunk
133
133
head = head + 4 -- unknown chunk magic number
134
- head = head + 4 + bytesToNumber ( head , 4 ) -- chunk length + chunk data
134
+ head = head + 4 + bytesToNumber ( midiData , head , 4 ) -- chunk length + chunk data
135
135
else
136
136
head = head + 4 -- track chunk magic number
137
137
138
- local chunkLength = bytesToNumber ( head , 4 )
138
+ local chunkLength = bytesToNumber ( midiData , head , 4 )
139
139
head = head + 4 -- chunk length
140
140
local chunkStart = head
141
141
@@ -145,10 +145,10 @@ function Parse_Internal( midiData )
145
145
146
146
local status = 0
147
147
while head < chunkStart + chunkLength do
148
- local deltaTime , deltaHead = vlq ( head ) -- timing
148
+ local deltaTime , deltaHead = vlq ( midiData , head ) -- timing
149
149
head = head + deltaHead
150
150
151
- local tempStatus = byteArray ( head , 1 )[ 1 ]
151
+ local tempStatus = byteArray ( midiData , head , 1 )[ 1 ]
152
152
153
153
if math.floor ( tempStatus / 128 ) == 1 then -- event, running status
154
154
head = head + 1
@@ -159,7 +159,7 @@ function Parse_Internal( midiData )
159
159
local channel = status - type * 16
160
160
161
161
if type == 8 then -- note off
162
- local data = byteArray ( head , 2 )
162
+ local data = byteArray ( midiData , head , 2 )
163
163
head = head + 2
164
164
165
165
table.insert ( track .messages , {
@@ -170,7 +170,7 @@ function Parse_Internal( midiData )
170
170
velocity = data [ 2 ]
171
171
} )
172
172
elseif type == 9 then -- note on
173
- local data = byteArray ( head , 2 )
173
+ local data = byteArray ( midiData , head , 2 )
174
174
head = head + 2
175
175
176
176
table.insert ( track .messages , {
@@ -191,9 +191,9 @@ function Parse_Internal( midiData )
191
191
elseif type == 14 then -- pitch bend
192
192
head = head + 2
193
193
elseif status == 255 then -- meta event
194
- local metaType = byteArray ( head , 1 )[ 1 ]
194
+ local metaType = byteArray ( midiData , head , 1 )[ 1 ]
195
195
head = head + 1
196
- local metaLength , metaHead = vlq ( head )
196
+ local metaLength , metaHead = vlq ( midiData , head )
197
197
198
198
if metaType == 3 then -- track name
199
199
head = head + metaHead
@@ -241,7 +241,7 @@ function Parse_Internal( midiData )
241
241
elseif metaType == 81 then -- tempo
242
242
head = head + 1
243
243
244
- local micros = bytesToNumber ( head , 3 )
244
+ local micros = bytesToNumber ( midiData , head , 3 )
245
245
head = head + 3
246
246
247
247
table.insert ( track .messages , {
@@ -253,7 +253,7 @@ function Parse_Internal( midiData )
253
253
elseif metaType == 88 then -- time signature
254
254
head = head + 1
255
255
256
- local sig = byteArray ( head , 4 )
256
+ local sig = byteArray ( midiData , head , 4 )
257
257
head = head + 4
258
258
259
259
table.insert ( track .messages , {
@@ -265,7 +265,7 @@ function Parse_Internal( midiData )
265
265
elseif metaType == 89 then -- key signature
266
266
head = head + 1
267
267
268
- local sig = byteArray ( head , 2 )
268
+ local sig = byteArray ( midiData , head , 2 )
269
269
head = head + 2
270
270
271
271
table.insert ( track .messages , {
@@ -294,23 +294,23 @@ function Parse_Internal( midiData )
294
294
return ret
295
295
end
296
296
297
- function byteArray ( _start , _length )
297
+ function byteArray ( midiData , _start , _length )
298
298
local retArray = {}
299
299
for i = 1 , _length do
300
300
retArray [ i ] = string.byte ( midiData , i + _start - 1 )
301
301
end
302
302
return retArray
303
303
end
304
304
305
- function bytesToNumber ( _start , _length )
305
+ function bytesToNumber ( midiData , _start , _length )
306
306
local retNumber = 0
307
307
for i = 1 , _length do
308
308
retNumber = retNumber + string.byte ( midiData , i + _start - 1 ) * math.pow ( 256 , _length - i )
309
309
end
310
310
return retNumber
311
311
end
312
312
313
- function vlq ( _start ) -- Variable-length quantity
313
+ function vlq ( midiData , _start ) -- Variable-length quantity
314
314
local retNumber = 0
315
315
local head = 0
316
316
local byte = 0
0 commit comments