我是一个编码newb(尽管我在一个名为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”,那么Chip将播放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代码可识别的字符串。请帮忙。
答案 0 :(得分:0)
对问题不太确定,但您尝试过base64 encoding and decoding吗?应该有很多库。
答案 1 :(得分:-1)
好的,我知道这个答案已经晚了一年多了,但我刚刚通过Google偶然发现了这个问题,事实证明,我已经制定了一个程序,要在2009年做到这一点。我做了在Wiremod Forum thread关于其他人转换器的帖子。
来自论坛帖子:
注意: 将midi拖到应用程序上进行转换。它将在与midi相同的文件夹中输出expression2。 不支持midi 0型,这是出于懒惰。 不支持音高混合。这在NES的第一级Contra中经常使用(使用我能找到的唯一的NSF2MIDI转换器)。 默认情况下,所有曲目都会播放synth / tri.wav,但您可以轻松更改它。 您必须将间隔()更改为20才能使歌曲以正确的速度播放。
您可以下载此转换器here。
我可能已经制作了一个更好的转换器,但它对于我正在使用它(将NES音乐转换为midi然后转换为Expression 2)非常有效。