如何在python中合并或连接两个midi文件

Posted

技术标签:

【中文标题】如何在python中合并或连接两个midi文件【英文标题】:How merge or Concatenating two midi files in python 【发布时间】:2017-04-02 20:09:14 【问题描述】:

我正在开发一个生成 midi 文件作为输出的项目。但是那些midi文件很短,我想合并或连接它们以产生一个长的midi文件。我正在使用python-midi library,关于这个库的信息或文档并不多。我试过这个程序,但它给出了错误:

import midi
pattern=midi.read_midifile("kl.mid")
track=midi.Track()
pattern2=midi.read_midifile("oi.mid")
pattern.append(pattern2)
midi.write_midifile("aaka.mid",pattern)

错误:

    Traceback (most recent call last):
  File "lp.py", line 6, in <module>
    midi.write_midifile("aaka.mid",pattern)
  File "/home/userdf/.local/lib/python2.7/site-packages/midi/fileio.py", line 152, in write_midifile
    return writer.write(midifile, pattern)
  File "/home/userdf/.local/lib/python2.7/site-packages/midi/fileio.py", line 102, in write
    self.write_track(midifile, track)
  File "/home/userdf/.local/lib/python2.7/site-packages/midi/fileio.py", line 116, in write_track
    buf += self.encode_midi_event(event)
  File "/home/userdf/.local/lib/python2.7/site-packages/midi/fileio.py", line 125, in encode_midi_event
    ret += write_varlen(event.tick)
AttributeError: 'Track' object has no attribute 'tick'

我搜索了很多,但没有找到通过 python 添加两个 midi 文件的方法。 让我知道我该怎么做?

提前致谢。

【问题讨论】:

什么是完整的堆栈跟踪?它应该告诉你错误在哪一行。 @twasbrillig ,我已经用更多信息编辑了这个问题。 也许你可以转换你的midi文件以使操作更容易......?你知道fourmilab.ch/webtools/midicsv 吗? ....您也可以使用mido.readthedocs.io/en/latest/midi_files.html#opening-a-file 并读取每个文件中的每个midi消息并在第三个文件中重新写入....? 【参考方案1】:

读取 MIDI 文件并保存模式

pattern1 = midi.read_midifile(file1)
pattern2 = midi.read_midifile(file2)

然后从每个模式中读取每个轨道

pattern = midi.Pattern()

for track in pattern1:
    pattern.append(track)

for track in pattern2:
    pattern.append(track)

最后用新模式保存文件

midi.write_midifile('sound.mid', pattern)

【讨论】:

用这种方法组合midi文件似乎实际上同时播放了两种模式(而不是OP要求的连接)。

以上是关于如何在python中合并或连接两个midi文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 合并或使用字符串连接两个熊猫数据框

在 python 中构建 MIDI 合并程序,带有恢复选项

如何在 Python 中将 ABC 表示法的音乐文件转换为 midi 或 mp3 [关闭]

如何合并轨道中的所有 Midi 事件?

如何“减慢” MIDI 文件(最好在 Python 中)?

如何使用python根据音符音高分割midi文件?