首页 > 解决方案 > MIDO:ValueError:变量 int 必须是正整数

问题描述

在我的代码中,我得到

Traceback (most recent call last):
  File "Midi Projects/symbolToChord_v1.py", line 160, in <module>
    mo.save("songWithChords.mid") 
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/mido/midifiles/midifiles.py", line 432, in save
    self._save(file)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/mido/midifiles/midifiles.py", line 445, in _save
    write_track(outfile, track)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/mido/midifiles/midifiles.py", line 251, in write_track
    data.extend(encode_variable_int(msg.time))
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/mido/midifiles/meta.py", line 112, in encode_variable_int
    raise ValueError('variable int must be a positive integer')
ValueError: variable int must be a positive intege

我想我正在 MIDO 上运行最新版本。

pip freeze | grep mido
mido==1.2.9

做错了什么?

任何帮助将不胜感激。

标签: mido

解决方案


我不是专家,但我遇到了类似的问题。

mido 中的时间属性有点令人困惑,因为它既可以表示刻度,也可以表示时间增量。从文档(https://mido.readthedocs.io/en/latest/midi_files.html#about-the-time-attribute ):

time 属性有几种不同的使用方式:

在轨道内,它是以刻度为单位的增量时间。这必须是一个整数。在从 play() 产生的消息中,它是以秒为单位的增量时间(自上次产生的消息以来经过的时间)(仅对实现者很重要)在某些方法中它用于以滴答声或秒为单位的绝对时间

您还可以查看此 github 问题以供参考https://github.com/mido/mido/issues/189


推荐阅读