示例#1
0
    def separate_track(original_track, num_track=1, default_tempo=100):
        set_tempo_event = SetTempoEvent()
        set_tempo_event.set_bpm(default_tempo)
        original_track.make_ticks_abs()
        channel_set = set()
        for event in original_track:
            if type(event) is NoteOnEvent or type(event) is NoteOffEvent:
                channel_set.add(event.channel)
            if type(event) is SetTempoEvent:
                set_tempo_event = event

        channel_track_map = {}
        index = 0
        for channel in channel_set:
            channel_track_map[channel] = index
            index += 1

        tracks = []
        for i in range(max(num_track, len(channel_set))):
            tracks.append(
                Track(events=[MIDI.copy_event(set_tempo_event)],
                      tick_relative=False))

        for event in original_track:
            if type(event) is NoteOnEvent or type(event) is NoteOffEvent:
                copied_event = MIDI.copy_event(event)
                tracks[channel_track_map[copied_event.channel]].append(
                    copied_event)

        for track in tracks:
            track.sort()
            track.make_ticks_rel()

        original_track.make_ticks_rel()
        return tracks
示例#2
0
    def copy_track(original_track, channel_offset=1, default_tempo=100):
        set_tempo_event = SetTempoEvent()
        set_tempo_event.set_bpm(default_tempo)
        for event in original_track:
            if type(event) is SetTempoEvent:
                set_tempo_event = event

        new_track = Track(events=[MIDI.copy_event(set_tempo_event)],
                          tick_relative=True)
        for event in original_track:
            if type(event) is NoteOnEvent or type(event) is NoteOffEvent:
                copied_event = MIDI.copy_event(event)
                copied_event.channel += channel_offset
                new_track.append(copied_event)
        return new_track
示例#3
0
 def new_track(tempo=100):
     track = Track()
     set_tempo_event = SetTempoEvent()
     set_tempo_event.set_bpm(tempo)
     track.append(set_tempo_event)
     return track