Extract data from list with some conditions
基本上,我正在尝试添加两个MIDI文件,但互联网上没有太多关于它的信息,所以我正在尝试自己的文件。
到目前为止,我已经添加了两条MIDI消息(MIDI数据类型)我有两条MIDI消息的列表。这意味着我现在拥有了所有需要合并两个MIDI的数据。问题是我不能以特定的格式添加数据。
所以我的代码是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from mido import MidiFile, MidiTrack mid = MidiFile('har.mid') mid2 = MidiFile('har2.mid') l = [msg for track in mid.tracks for msg in track] l.pop() ka = [msg for track in mid2.tracks for msg in track] ka.pop() result = l + ka for messagess in result: print(messagess) |
我得到这个输出:
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | note_on channel=0 note=59 velocity=40 time=0 note_on channel=0 note=60 velocity=40 time=0 note_on channel=0 note=64 velocity=40 time=0 note_off channel=0 note=59 velocity=0 time=55 note_off channel=0 note=64 velocity=0 time=0 note_on channel=0 note=52 velocity=40 time=0 note_off channel=0 note=60 velocity=0 time=55 note_on channel=0 note=64 velocity=40 time=0 note_on channel=0 note=67 velocity=40 time=0 note_off channel=0 note=67 velocity=0 time=55 note_on channel=0 note=57 velocity=40 time=0 note_off channel=0 note=52 velocity=0 time=55 note_off channel=0 note=57 velocity=0 time=0 note_off channel=0 note=64 velocity=0 time=0 note_on channel=0 note=57 velocity=40 time=55 note_off channel=0 note=57 velocity=0 time=55 note_on channel=0 note=64 velocity=40 time=0 note_on channel=0 note=67 velocity=40 time=0 note_off channel=0 note=64 velocity=0 time=55 note_off channel=0 note=67 velocity=0 time=0 note_on channel=0 note=57 velocity=40 time=110 note_on channel=0 note=64 velocity=40 time=0 note_off channel=0 note=57 velocity=0 time=55 note_off channel=0 note=64 velocity=0 time=0 note_on channel=0 note=62 velocity=40 time=0 note_off channel=0 note=62 velocity=0 time=55 note_on channel=0 note=57 velocity=40 time=110 note_on channel=0 note=62 velocity=40 time=0 note_off channel=0 note=57 velocity=0 time=55 note_off channel=0 note=62 velocity=0 time=0 note_on channel=0 note=60 velocity=40 time=0 note_on channel=0 note=62 velocity=40 time=0 note_on channel=0 note=67 velocity=40 time=0 note_on channel=0 note=60 velocity=40 time=55 note_on channel=0 note=64 velocity=40 time=0 note_off channel=0 note=60 velocity=0 time=55 note_off channel=0 note=62 velocity=0 time=0 note_off channel=0 note=64 velocity=0 time=0 note_off channel=0 note=67 velocity=0 time=55 note_on channel=0 note=64 velocity=40 time=0 note_off channel=0 note=64 velocity=0 time=55 note_on channel=0 note=60 velocity=40 time=0 note_off channel=0 note=60 velocity=0 time=55 note_on channel=0 note=62 velocity=40 time=0 note_off channel=0 note=62 velocity=0 time=55 note_on channel=0 note=64 velocity=40 time=0 note_off channel=0 note=64 velocity=0 time=55 note_on channel=0 note=60 velocity=40 time=110 note_on channel=0 note=62 velocity=40 time=0 note_off channel=0 note=60 velocity=0 time=55 note_off channel=0 note=62 velocity=0 time=0 note_on channel=0 note=48 velocity=40 time=110 note_on channel=0 note=62 velocity=40 time=0 note_off channel=0 note=48 velocity=0 time=55 note_off channel=0 note=62 velocity=0 time=0 note_on channel=0 note=57 velocity=40 time=55 note_on channel=0 note=60 velocity=40 time=0 |
现在可以了,但问题是我可以按以下格式添加要跟踪的邮件:
1 2 3 4 5 6 7 8 9 10 11 | from mido import Message, MidiFile, MidiTrack mid = MidiFile() track = MidiTrack() mid.tracks.append(track) track.append(Message('program_change', program=12, time=0)) track.append(Message('note_on', note=64, velocity=64, time=32)) track.append(Message('note_off', note=64, velocity=127, time=32)) mid.save('new_song.mid') |
所以我的问题是如何从这种格式中附加每一行:
1 | note_off channel=0 note=62 velocity=0 time=0 |
以这种格式
在
因为track.append只支持此格式方法:
1 | track.append(Message('note_off', note=62, velocity=0, time=0)) |
事先谢谢。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | from mido import MidiFile, MidiTrack mid = MidiFile('har.mid') mid2 = MidiFile('har2.mid') l = [msg for track in mid.tracks for msg in track] l.pop() ka = [msg for track in mid2.tracks for msg in track] ka.pop() result = l + ka mid3 = MidiFile() track = MidiTrack() mid3.tracks.append(track) for m in result: track.append(m) mid3.save('new_song.mid') |