如何在 MIDI 文件中嵌入控制更改命令

Posted

技术标签:

【中文标题】如何在 MIDI 文件中嵌入控制更改命令【英文标题】:How to embed control change commands inside of a MIDI file 【发布时间】:2008-08-29 05:49:05 【问题描述】:

我正在制作一个简单的游戏来学习一门新语言。我正在为游戏收集一些音乐,并想使用 MIDI 格式,以便我可以控制音轨的流动(即,我想有一个只播放一次并且在歌曲循环播放。)

我很难找到有关如何修改现有 MIDI 文件的信息,以便它们可以向合成器发送控制更改信号。有人有这方面的经验吗?


我认为我应该更清楚我原来的问题。我正在使用负责播放音乐的现有游戏引擎。我的印象是这个控制更改值必须直接嵌入到 MIDI 文件本身中,因为我无法控制合成器。来自手册:

MIDI 文件通过 DirectMusic 合成器。如果 BGM MIDI 文件包含控制更改值 111,该值被认为是 这首歌将在它之后开始重复 到达终点。

我希望我能以编程方式完成。我想我在这里追求的是某种编辑器,它可以让我修改我已经拥有的 MIDI 文件。

【问题讨论】:

【参考方案1】:

听起来你真正想要的是midi editor

【讨论】:

【参考方案2】:

尝试查看Midi 1.0 spec

这是control change messages 的表格,不过看起来您正在寻找一种在软件中执行此操作的方法。是吗?

您可以尝试将其作为原始 midi 数据发送(即该表上的消息)

再次查看您的问题...我的答案没有那么有用...

如果我是你,我会做的是将介绍分开到它自己的文件中,然后你有一个文件,其中包含只是你想要循环的内容。

您还可以查看 Standard Midi File format (SMF) 的规范

【讨论】:

【参考方案3】:

DirectMusicProducer 可能是您使用 DirectMusic 演奏时最好的免费选择。我不相信 MIDI 录制功能会包含控制更改,但您的引擎可能支持播放更灵活的片段文件。

大约 10 年前,我使用的唯一 MIDI 音序器成本约为 300 美元(现在似乎已不存在),但我不知道有任何优质的免费 MIDI 文件音序器。 (注意“MIDI 编辑器”可能与“MIDI 文件编辑器”或“MIDI 音序器”不同)

【讨论】:

以上是关于如何在 MIDI 文件中嵌入控制更改命令的主要内容,如果未能解决你的问题,请参考以下文章

如何读取 MIDI 文件、更改其乐器并将其写回?

如何读取 MIDI 脚踏控制器的初始状态?

如何在 Java MIDI 程序中更改乐器

在音轨播放期间更改乐器 - MIDI/Java

Xcode - 我如何以编程方式在容器视图中嵌入/更改视图控制器?

如何访问和更改 Pygame.midi?