python:如何计算 MIDI 文件播放时长

数据结构层面上来说,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'):
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值