-1

我是一个编码新手(虽然我在一个名为 Garry's Mod 的游戏中编写了表达式 2),我需要一些帮助。我正在尝试将 MIDI 转换为名为 Expression 2 的米老鼠编码语言的字符串。这种“表达式 2”是一款名为 Garry's Mod 的游戏中的编码语言。我的表达式 2 代码允许我编写代码来播放歌曲。

#|  2  3     5  6  7     9  0     =  a  s     f  g     j  k  l     '
#| |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
#| |C#|D#|  |F#|G#|A#|  |C#|D#|  |F#|G#|A#|  |C#|D#|  |F#|G#|A#|  |C#|
#| |__|__|  |__|__|__|  |__|__|  |__|__|__|  |__|__|  |__|__|__|  |__|
#|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
#|C |D |E |F |G |A |B |C |D |E |F |G |A |B |C |D |E |F |G |A |B |C |  |                                                            
#|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|
# q  w  e  r  t  y  u  i  o  p  [  ]  z  x  c  v  b  n  m  ,  .  /

这是 E2 代码的寄存器。如果我在 e2 中输入字符串“qwertyu”,芯片将播放音符 CDEFGAB。很长一段时间以来,我不得不手动输入相应的字母键来制作歌曲。

这就是播放 Pachelbel 的歌曲“Canon”的代码的样子

if (first()) {
    TrackSounds[1,string] = "synth/sine.wav"
    TrackVolume[1,number] = 0.8
    TrackStrings[1,string] =

"]]]]]]]]]pppp[[[[]]]]]]]]]pppp[[[[]]]]]ttttyyyyuuuuiiiioooopppp[[[["+
"pppppppiiiiooooppppppppeeeerrrrttttyyyyttttrrrrtttttttttt"+
"iiiiuuuuiiiiiiiiyyyyiiiiuuuuyyyyttttrrrrttttttt"

如果你想知道为什么字母会重复这么多,那是因为(这个)表达式 2 读取每个字母并播放相关的音符 50 个滴答声。不要介意这一点。这都是相对的。如果音符之间有停顿,则停顿长度(停顿是字符串中的空格)与音符长度相关,反之亦然。

我想制作一个程序(或找到一个程序),可以将一个简单的 MIDI 文件转换为我的 e2 代码可识别的字符串。请帮忙。

4

2 回答 2

0

不太确定问题,但是您是否尝试过base64 编码和解码?应该有很多图书馆。

于 2013-04-16T06:55:52.480 回答
-1

好的,我知道这个答案迟了一年多,但我只是通过谷歌偶然发现了这个问题,事实证明,我已经在 2009 年制定了一个程序来做到这一点。我在关于其他人转换器的Wiremod 论坛主题。

来自论坛帖子:

注意:将 MIDI 拖到应用程序上进行转换。它将在与 midi 相同的文件夹中输出表达式 2。不支持 midi type 0,这是出于懒惰。不支持音高混合。这在 NES 上的第一级魂斗罗中经常使用(使用我能找到的唯一 NSF2MIDI 转换器)。默认情况下,所有曲目都播放 synth/tri.wav,但您可以轻松更改它。您必须将 interval() 更改为 20,歌曲才能以正确的速度播放。

您可以在此处下载此转换器。

我可能可以制作一个更好的转换器,但它非常适合我使用它的用途(将 NES 音乐转换为 midi,然后转换为 Expression 2)

于 2015-02-28T09:40:20.850 回答