抑制 MIDI 文件的结尾

Posted

技术标签:

【中文标题】抑制 MIDI 文件的结尾【英文标题】:suppress the end of a midi file 【发布时间】:2021-05-26 08:09:49 【问题描述】:

例如,我想删除一个 MIDI 文件的结尾,以便拥有一个 30 秒的文件。

我尝试在每个轨道上计算总时间值,并在每次超过 30 秒时删除消息。不过我听的时候还是一样的时长,唯一的区别就是文件中间有一个没有声音的间隙。

有人知道我该怎么做吗?

谢谢!

【问题讨论】:

欢迎来到 SO,请提供您尝试过的内容。 【参考方案1】:

很可能,您忘记删除一些 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')

【讨论】:

谢谢,我试过了,效果不错!

以上是关于抑制 MIDI 文件的结尾的主要内容,如果未能解决你的问题,请参考以下文章

BLE MIDIMIDI 文件格式分析 ( MIDI 文件头解析 | MIDI 文件头标识 | MIDI 文件头长度 | MIDI 文件格式 | MIDI 轨道个数 | 基本时间 )

BLE MIDIMIDI 文件格式分析 ( MIDI 文件头解析 | MIDI 文件头标识 | MIDI 文件头长度 | MIDI 文件格式 | MIDI 轨道个数 | 基本时间 )(代码

关于MIDI文件

BLE MIDIMIDI 文件格式分析 ( MIDI 轨道分析 | MIDI 轨道头 | MIDI 轨道长度 | delta-time 间隔 )

BLE MIDIMIDI 文件格式分析 ( MIDI 轨道分析 | MIDI 轨道头 | MIDI 轨道长度 | delta-time 间隔 )

从 Java 中的 Midi 文件中读取 Midi 消息 [重复]