【发布时间】:2021-05-26 08:09:49
【问题描述】:
例如,我想删除一个 MIDI 文件的结尾,以便拥有一个 30 秒的文件。
我尝试在每个轨道上计算总时间值,并在每次超过 30 秒时删除消息。不过我听的时候还是一样的时长,唯一的区别就是文件中间有一个没有声音的间隙。
有人知道我该怎么做吗?
谢谢!
【问题讨论】:
-
欢迎来到 SO,请提供您尝试过的内容。
例如,我想删除一个 MIDI 文件的结尾,以便拥有一个 30 秒的文件。
我尝试在每个轨道上计算总时间值,并在每次超过 30 秒时删除消息。不过我听的时候还是一样的时长,唯一的区别就是文件中间有一个没有声音的间隙。
有人知道我该怎么做吗?
谢谢!
【问题讨论】:
很可能,您忘记删除一些 MetaMessage。 试试这个:
import mido
midifile = mido.MidiFile('old.mid')
lasttick = # last tick you want to keep
for track in midifile.tracks:
tick = 0
keep = []
for msg in track:
if tick > lasttick:
break
keep.append(msg)
tick += msg.time
track.clear()
track.extend(keep)
midifile.save('new.mid')
【讨论】: