20

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

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

4

5 回答 5

14

正如 Vinko 所说,您可以编辑 midifile,但由于它是二进制格式,压缩到尽可能少的位数,因此需要帮助。

这是一个 midi 到文本的转换器(反之亦然): http:
//midicomp.opensrc.org/
我最近一直在使用它。一旦您将midifile 作为文本,对简单的操作进行文本处理(例如搜索带有“Tempo”的行)是非常简单的。没有在mac上尝试过(在ubuntu 8.04上编译没有问题)。

特别是关于 midifile 速度,放慢或加快播放速度真的很容易,因为事件的时间是根据“滴答声”指定的,其实际持续时间(以秒为单位)由 Vinko 引用中描述的速度参数确定。我相信拍号不是那么重要,主要是为了在 MIDI 音序器中打开时正确显示小节/节拍。

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

[嗯......似乎我只能在每个帖子的链接上发布,作为一个新用户。我会尝试在几个评论或其他几个答案中发布指向 python 模块的链接...]

于 2009-09-19T21:34:34.903 回答
9

您可以根据http://www.sonicspot.com/guide/midifiles.html编辑文件

虽然可能已经有一个 MIDI 读/写库。其实就是看相关问题:Simple, Cross Platform MIDI Library for Python

设定速度

此元事件以每四分音符的微秒为单位设置序列速度,以三个字节编码。它通常出现在第一个轨道块中,时间对齐,与 MIDI 时钟消息同时出现,以促进更准确的同步。如果不存在设定速度事件,则假定为每分钟 120 拍。以下公式可用于将速度从每四分音符微秒转换为每分钟节拍并返回。

MICROSECONDS_PER_MINUTE = 60000000

BPM = MICROSECONDS_PER_MINUTE / MPQN
MPQN = MICROSECONDS_PER_MINUTE / BPM
元事件类型长度微秒/四分音符
255 (0xFF) 81 (0x51) 3 0-8355711
于 2009-09-06T00:47:20.353 回答
5

您可以使用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 年后你正在听同样的歌曲,可以试试看!否则,我希望这可以帮助像我一样今天醒来并且正在挠头试图轻松解决这个问题的其他人。

于 2017-01-07T01:29:41.683 回答
1

@dermen 在 Windows、Python 3.8 上测试了该版本。不得不稍微调整一下,但仍然有效!

import music21

fctr = 1.5 # scale (in this case stretch) the overall tempo by this factor
score = music21.converter.Converter()
score.parseFile('home.mid')
newscore = score.stream.augmentOrDiminish(fctr)
newscore.write('midi','song_slow.mid')
于 2020-04-10T15:14:51.400 回答
0

我和你的帖子有相似的兴趣。我刚刚遇到了这个看起来很有前途的图书馆:

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

于 2013-12-15T15:27:14.510 回答