-
Notifications
You must be signed in to change notification settings - Fork 0
/
MIDOBUGFIX.py
29 lines (24 loc) · 897 Bytes
/
MIDOBUGFIX.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from mido import MidiTrack, MetaMessage
def merge_tracksFIXED(tracks):
"""Returns a MidiTrack object with all messages from all tracks.
The messages are returned in playback order with delta times
as if they were all in one track.
"""
now = 0 # REMOVE THIS
messages = MidiTrack()
for track in tracks:
now = 0 # ADD THIS
for message in track:
now += message.time
if message.type not in ('track_name', 'end_of_track'):
messages.append(message.copy(time=now))
if message.type == 'end_of_track':
break
messages.sort(key=lambda x: x.time)
messages.append(MetaMessage('end_of_track', time=now))
# Convert absolute time back to delta time.
last_time = 0
for message in messages:
message.time -= last_time
last_time += message.time
return messages