private static void DecodeToken(int token, TrackConsultant tracks) { if (token >= 0 && token < 3840) { var pitch = token % 128; var inst_vol_index = token >> 7; var instrument = Instruments[inst_vol_index]; var volume = Volumes[inst_vol_index]; tracks[instrument].AddNoteEvent(pitch, volume, volume > 0); return; } else if (token >= 3840 && token < 3968) { var pitch = token % 128; tracks["drum"].AddNoteEvent(pitch, 80, true); } else if (token >= 3968 && token < 4096) { var delay = (token % 128) + 1; tracks.AddDeltaTime(delay); return; } else if (token == 4096) { return; //Start } else { return; //Invalid } }
public static MidiFile DecodeMuseEncoding(string[] tokens) { TrackConsultant tracks = new TrackConsultant(); foreach (string token in tokens) { DecodeToken(int.Parse(token), tracks); } tracks.FinishDrums(); return(tracks.GetMidiFile()); }