数据结构层面上来说,midi 文件中没有直接存储整首乐曲的时间长度信息,因此计算整个长度就需要遍历文件,找出每个 tempo 变更事件,然后计算出 tempo 变更事件之后的时间长度,然后把各个时间长度加起来,就是整个 midi 文件的播放时长。
pip install mido
在 python 中,可以使用 mido 库来计算 MIDI 文件的播放时长。
以下代码会遍历MIDI文件中的所有音轨,计算出最大的时间戳,即播放时长。需要注意的是,这里的时长是以"tick"(节拍)为单位的,如果需要转换成更常见的秒单位,需要根据MIDI文件中定义的 tempo 来转换。
编写 mido_duration.py 如下
# -*- coding: utf-8 -*-
""" how to 计算 MIDI文件播放时长 """
import os
import sys
from tkinter import filedialog
import mido
def get_tempo(file_path):
mid = mido.MidiFile(file_path)
tempo_list = [msg for msg in mid if msg.type == "set_tempo"]
return tempo_list
def get_midi_duration(file_path):
mid = mido.MidiFile(file_path)
total_time = 0
max_time = 0
for track in mid.tracks:
time = 0
for message in track:
if message.type == 'time_signature':
continue
time += message.time
if hasattr(message, 'duration'):

最低0.47元/天 解锁文章
1799

被折叠的 条评论
为什么被折叠?



