unity3d 如何找到MIDI文件中每对音符之间的音程大小?

mwg9r5ms  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(116)

我试图找到midi文件中每对音符的音程大小(即一对音符之间有多少个半音)。例如,C大调音阶midi文件将返回{2,2,1,2,2,2,1}。
我下载了DryWetMIDI并将其作为一项资产导入Unity,在代码上做了些手脚。然而,我在理解这个库方面遇到了麻烦。
一个可能的解决方案是在每次演奏新音符时使用CompareTo(Note)方法将其与前一个音符进行比较,但我不确定如何编写代码。
我还没有试过其他的图书馆。

55ooxyrt

55ooxyrt1#

我是DryWetMIDI的作者。我不确定你到底想要什么,但也许这段代码会帮助你:

var lastNotesByChannels = new Dictionary<FourBitNumber, Note>();

foreach (var note in midiFile.GetNotes())
{
    if (lastNotesByChannels.TryGetValue(note.Channel, out var lastNote))
    {
        var interval = note.NoteNumber - lastNote.NoteNumber;
        // do something with interval
    }

    lastNotesByChannels[note.Channel] = note;
}

这里我们处理每个通道相邻音符之间的间隔。请根据您的任务调整此代码。
请注意,该库有全面的文档,请使用它:https://melanchall.github.io/drywetmidi

相关问题