Skip to content

Commit 834ca66

Browse files
committed
MidiEventDecoder uses classes per channel event
1 parent 8092e90 commit 834ca66

File tree

3 files changed

+219
-110
lines changed

3 files changed

+219
-110
lines changed

MidiEventDecoder.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
class MidiEventDecoder:
99
def __init__(self, midiFilename):
1010
self.midiParser = MidiParser(midiFilename)
11+
self.runningStatus = False
1112
return
1213
def hasMoreEvents(self):
1314
return self.midiParser.hasMoreData()
@@ -24,7 +25,9 @@ def nextEvent(self):
2425
def midiEvent(self, midiData):
2526
#check if TrackHeader
2627
if midiData[0:4] == b'MTrk':
27-
return TrackHeader(midiData)#MidiEvent(b'\x00', midiData)
28+
trackHeader = TrackHeader()
29+
trackHeader.setFromBytes(midiData)
30+
return trackHeader
2831
#find deltaTime
2932
tempData = midiData
3033
temp = 0
@@ -43,11 +46,26 @@ def midiEvent(self, midiData):
4346
metaEvent.setDeltaTimeFromBytes(deltaTime)
4447
metaEvent.setFromBytes(midiData)
4548
return metaEvent
46-
#return MetaEvent(Util.varLenVal(deltaTime), midiData)
4749
#System Event
4850
if midiData[0:1] == b'\xf0' or midiData[0:1] == b'\xf7':
49-
return SystemEvemt(Util.varLenVal(deltaTime), midiData)
50-
return ChannelEvent(Util.varLenVal(deltaTime), midiData)
51+
systemEvent = SystemExclusiveEvent()
52+
systemEvent.setDeltaTimeFromBytes(deltaTime)
53+
systemEvent.setFromBytes(midiData)
54+
return systemEvent
55+
#Channel Event
56+
if Util.msbIsOne(midiData): #running status
57+
self.lastChannelStatusByte = midiData[0]
58+
else: #not running status
59+
midiData = self.lastChannelStatusByte + midiData
60+
channelEventIdentifier = midiData[0] & int('f0',16)
61+
if (channelEventIdentifier in EventDictionaries.CHANNEL_EVENT_DICTIONARY):
62+
channelEventClass = EventDictionaries.CHANNEL_EVENT_DICTIONARY[channelEventIdentifier]
63+
else:
64+
channelEventClass = ChannelEvent
65+
channelEvent = channelEventClass()
66+
channelEvent.setDeltaTimeFromBytes(deltaTime)
67+
channelEvent.setFromBytes(midiData)
68+
return channelEvent
5169
def close(self):
5270
self.midiParser.close()
5371

0 commit comments

Comments
 (0)