Created
July 27, 2019 21:44
-
-
Save mtytel/df02bf3014ad3c491637108bb2c30060 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
using System.IO; | |
using Sanford.Multimedia.Midi; | |
public class MidiTest : MonoBehaviour | |
{ | |
[System.Serializable] | |
public class MidiData | |
{ | |
// All the note data | |
} | |
public MidiData midiData; | |
public void LoadMidiData(string filePath) | |
{ | |
FileStream midiStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); | |
midiData = LoadMidiData(midiStream); | |
} | |
public static MidiData LoadMidiData(Stream midiStream) | |
{ | |
return ReadMidiFile(midiStream); | |
} | |
static MidiData ReadMidiFile(Stream midiStream) | |
{ | |
MidiData midiData = new MidiData(); | |
Sequence midiSequence = new Sequence(midiStream); | |
float length = midiSequence.GetLength() / midiSequence.Division; | |
foreach (Track midiTrack in midiSequence) | |
ReadMidiTrack(midiData, midiTrack, midiSequence.Division); | |
return midiData; | |
} | |
static void ReadMidiTrack(MidiData midiData, Track midiTrack, int sequencerDivision) | |
{ | |
for (int i = 0; i < midiTrack.Count; ++i) | |
{ | |
MidiEvent midiEvent = midiTrack.GetMidiEvent(i); | |
if (midiEvent.MidiMessage.GetBytes().Length < 3) | |
continue; | |
byte midiType = (byte)(midiEvent.MidiMessage.GetBytes()[0] & 0xFF); | |
byte note = (byte)(midiEvent.MidiMessage.GetBytes()[1] & 0xFF); | |
byte velocity = (byte)(midiEvent.MidiMessage.GetBytes()[2] & 0xFF); | |
float time = midiEvent.AbsoluteTicks / (float)sequencerDivision; | |
if (midiType == (byte)ChannelCommand.NoteOff || (midiType == (byte)ChannelCommand.NoteOn) && velocity == 0) | |
{ | |
// Note Off | |
} | |
else if (midiType == (byte)ChannelCommand.NoteOn) | |
{ | |
// Note On | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment