代码之家  ›  专栏  ›  技术社区  ›  Alex Martelli

如何“放慢”MIDI文件的速度(最好是在Python中)?

  •  15
  • Alex Martelli  · 技术社区  · 16 年前

    我有一些歌曲的背景音乐,有.mid和.kar两种格式,但在每种情况下,它的播放速度都比我想要的快。创建内容相同但速度较慢的.mid或.kar文件最简单的方法是什么?比如说,一个文件慢了20%左右,另一个慢了15%,第三个慢了25%,等等?

    理想情况下,我更喜欢跨平台的python脚本(因为这可以让我在实验上轻松地调整源代码,使其收敛到我想要的确切效果;-),但我会选择在Linux(如果重要的话,是Ubuntu 8.04)和Mac(Mac OS X 10.5,但最好是10.6兼容性)中运行的任何免费解决方案。

    4 回复  |  直到 9 年前
        1
  •  9
  •   Community Mohan Dere    8 年前

    您可以根据 http://www.sonicspot.com/guide/midifiles.html

    尽管可能已经有了一个MIDI读/写库。事实上,这是一个看到相关问题的问题: Simple, Cross Platform MIDI Library for Python

    设置Tempo

    此元事件设置 按顺序节奏 每季度微秒注 以三个字节编码。它通常是 在第一个轨道块中发现, 同时发生的时间 作为MIDI时钟消息进行升级 更精确的同步。如果没有 设置速度事件,120次 假设为每分钟。以下 公式可用于翻译 速度从微秒/秒开始 每分钟节拍的四分之一音符 回来。

    MICROSECONDS_PER_MINUTE = 60000000
    
    BPM = MICROSECONDS_PER_MINUTE / MPQN
    MPQN = MICROSECONDS_PER_MINUTE / BPM
    
    Meta Event  Type    Length  Microseconds/Quarter-Note
    255 (0xFF)  81 (0x51)   3   0-8355711
    
        2
  •  13
  •   alex rae    16 年前

    正如vinko所说,您可以编辑midifile,但是由于它是一种二进制格式,压缩到尽可能少的位,所以有助于获得帮助。

    这是一个MIDI到文本转换器(反之亦然):
    http://midicomp.opensrc.org/
    我最近用了不少。当您将midifile作为文本时,为简单的操作执行文本处理(例如搜索带有“tempo”的行)是非常简单的。还没有在Mac上尝试过(在Ubuntu 8.04上编译没有问题)。

    具体来说,对于midifile-tempo,很容易减慢或加快播放速度,因为事件的时间是以“滴答”的形式指定的,其实际持续时间(秒)由vinko引用中描述的tempo参数决定。我认为时间签名没有那么重要,主要是为了在MIDI序列器中打开时正确显示条/节拍。

    此外,除了pyportmidi,还有其他一些python midi模块。

    嗯…似乎我只能在每个帖子的链接上发布,作为一个新用户。我将尝试在几个注释或其他几个答案中发布到python模块的链接…]

        3
  •  2
  •   dermen Frank Zalkow    9 年前

    你可以使用 music21 为此,尽管我只在OSX 10.10.1上测试过它。

    import music21
    
    fctr = 1.25 # scale (in this case stretch) the overall tempo by this factor
    score = music21.converter.parse('song.mid')
    newscore = score.scaleOffsets(fctr).scaleDurations(fctr)
    
    newscore.write('midi','song_slow.mid') 
    

    偏移量就像每个音符的时间戳,持续时间就是音符的发声长度,我相信对每个音符应用相同的比例因子有点像调整节奏。

    如果你和我一样,那么7年后你也在听同一首歌,你可以试试看!否则,我希望这能帮助像我这样今天醒来的人,努力轻松解决这个问题。

        4
  •  0
  •   Mike    12 年前

    我对你的职位也有同样的兴趣。我刚看到这个图书馆,看起来很有前途:

    http://web.mit.edu/music21/

    推荐文章