Skip to content

Commit 0299e0f

Browse files
committed
Fix a nil value error related to byteArray, bytesToNumber and vlq (local) functions not being called with midiData.
1 parent 36d3e68 commit 0299e0f

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

lua/includes/modules/midi-parser.lua

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -104,13 +104,13 @@ function Parse_Internal( midiData )
104104
local ret = {}
105105
local head = 1
106106

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
108108
error( "input data seems not to be valid MIDI data" )
109109
end
110110
head = head + 4 -- header chunk magic number
111111
head = head + 4 -- header chunk length
112112

113-
ret.format = bytesToNumber( head, 2 )
113+
ret.format = bytesToNumber( midiData, head, 2 )
114114

115115
if not ( ret.format == 0 or ret.format == 1 ) then
116116
error( "not supported such format of MIDI" )
@@ -119,7 +119,7 @@ function Parse_Internal( midiData )
119119

120120
head = head + 2 -- trackCount
121121

122-
ret.timebase = bytesToNumber( head, 2 )
122+
ret.timebase = bytesToNumber( midiData, head, 2 )
123123
head = head + 2 -- timeBase
124124

125125
------------------------
@@ -129,13 +129,13 @@ function Parse_Internal( midiData )
129129
ret.tracks = {}
130130

131131
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
133133
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
135135
else
136136
head = head + 4 -- track chunk magic number
137137

138-
local chunkLength = bytesToNumber( head, 4 )
138+
local chunkLength = bytesToNumber( midiData, head, 4 )
139139
head = head + 4 -- chunk length
140140
local chunkStart = head
141141

@@ -145,10 +145,10 @@ function Parse_Internal( midiData )
145145

146146
local status = 0
147147
while head < chunkStart + chunkLength do
148-
local deltaTime, deltaHead = vlq( head ) -- timing
148+
local deltaTime, deltaHead = vlq( midiData, head ) -- timing
149149
head = head + deltaHead
150150

151-
local tempStatus = byteArray( head, 1 )[ 1 ]
151+
local tempStatus = byteArray( midiData, head, 1 )[ 1 ]
152152

153153
if math.floor( tempStatus / 128 ) == 1 then -- event, running status
154154
head = head + 1
@@ -159,7 +159,7 @@ function Parse_Internal( midiData )
159159
local channel = status - type * 16
160160

161161
if type == 8 then -- note off
162-
local data = byteArray( head, 2 )
162+
local data = byteArray( midiData, head, 2 )
163163
head = head + 2
164164

165165
table.insert( track.messages, {
@@ -170,7 +170,7 @@ function Parse_Internal( midiData )
170170
velocity = data[ 2 ]
171171
} )
172172
elseif type == 9 then -- note on
173-
local data = byteArray( head, 2 )
173+
local data = byteArray( midiData, head, 2 )
174174
head = head + 2
175175

176176
table.insert( track.messages, {
@@ -191,9 +191,9 @@ function Parse_Internal( midiData )
191191
elseif type == 14 then -- pitch bend
192192
head = head + 2
193193
elseif status == 255 then -- meta event
194-
local metaType = byteArray( head, 1 )[ 1 ]
194+
local metaType = byteArray( midiData, head, 1 )[ 1 ]
195195
head = head + 1
196-
local metaLength, metaHead = vlq( head )
196+
local metaLength, metaHead = vlq( midiData, head )
197197

198198
if metaType == 3 then -- track name
199199
head = head + metaHead
@@ -241,7 +241,7 @@ function Parse_Internal( midiData )
241241
elseif metaType == 81 then -- tempo
242242
head = head + 1
243243

244-
local micros = bytesToNumber( head, 3 )
244+
local micros = bytesToNumber( midiData, head, 3 )
245245
head = head + 3
246246

247247
table.insert( track.messages, {
@@ -253,7 +253,7 @@ function Parse_Internal( midiData )
253253
elseif metaType == 88 then -- time signature
254254
head = head + 1
255255

256-
local sig = byteArray( head, 4 )
256+
local sig = byteArray( midiData, head, 4 )
257257
head = head + 4
258258

259259
table.insert( track.messages, {
@@ -265,7 +265,7 @@ function Parse_Internal( midiData )
265265
elseif metaType == 89 then -- key signature
266266
head = head + 1
267267

268-
local sig = byteArray( head, 2 )
268+
local sig = byteArray( midiData, head, 2 )
269269
head = head + 2
270270

271271
table.insert( track.messages, {
@@ -294,23 +294,23 @@ function Parse_Internal( midiData )
294294
return ret
295295
end
296296

297-
function byteArray( _start, _length )
297+
function byteArray( midiData, _start, _length )
298298
local retArray = {}
299299
for i = 1, _length do
300300
retArray[ i ] = string.byte( midiData, i + _start - 1 )
301301
end
302302
return retArray
303303
end
304304

305-
function bytesToNumber( _start, _length )
305+
function bytesToNumber( midiData, _start, _length )
306306
local retNumber = 0
307307
for i = 1, _length do
308308
retNumber = retNumber + string.byte( midiData, i + _start - 1 ) * math.pow( 256, _length - i )
309309
end
310310
return retNumber
311311
end
312312

313-
function vlq( _start ) -- Variable-length quantity
313+
function vlq( midiData, _start ) -- Variable-length quantity
314314
local retNumber = 0
315315
local head = 0
316316
local byte = 0

0 commit comments

Comments
 (0)