public List <byte> CreateMetaBytes() { List <byte> data = new List <byte>(); if (Type.Equals("sequence_number")) { data.Add((byte)(Number >> 8)); data.Add((byte)(Number & 0xff)); } if (Type.Equals("text") || Type.Equals("copyright") || Type.Equals("lyrics") || Type.Equals("marker") || Type.Equals("cue_marker")) { if (Text == null) { Text = ""; } data.AddRange(MidiExport.Ascii.GetBytes(Text)); } if (Type.Equals("track_name") || Type.Equals("instrument_name") || Type.Equals("device_name")) { data.AddRange(MidiExport.Ascii.GetBytes(Name)); } if (Type.Equals("channel_prefix")) { data.Add((byte)Channel); } if (Type.Equals("midi_port")) { data.Add((byte)Port); } if (Type.Equals("set_tempo")) { //return [tempo >> 16, tempo >> 8 & 0xff, tempo & 0xff] data.Add((byte)(Tempo >> 16)); data.Add((byte)((Tempo >> 8) & 0xff)); data.Add((byte)(Tempo & 0xff)); } if (Type.Equals("time_signature")) { data.Add((byte)Numerator); data.Add((byte)Math.Log(Denominator, 2)); data.Add((byte)ClocksPerClick); data.Add((byte)Notated32NdNotesPerBeat); } if (Type.Equals("key_signature")) { data.Add((byte)(Key & 0xff)); data.Add(_isMajor ? (byte)0x00 : (byte)0x01); } int dataLength = data.Count; data.InsertRange(0, MidiExport.EncodeVariableInt(dataLength)); data.Insert(0, _code); data.Insert(0, 0xff); return(data); }
public List <byte> CreateBytes() { List <byte> data = new List <byte>(); byte runningStatusByte = 0x00; bool statusByteSet = false; foreach (MidiMessage message in Messages) { if (message.Time < 0) { message.Time = 0; } data.AddRange(MidiExport.EncodeVariableInt(message.Time)); if (message.Type.Equals("sysex")) { statusByteSet = false; data.Add(0xf0); data.AddRange(MidiExport.EncodeVariableInt(message.Data.Length + 1)); data.AddRange(message.Data); data.Add(0xf7); } else { List <byte> raw = new List <byte>(); raw = message.CreateBytes(); byte temp = raw[0]; if (statusByteSet && !message.IsMeta && raw[0] < 0xf0 && raw[0] == runningStatusByte) { raw.RemoveAt(0); data.AddRange(raw); } else { data.AddRange(raw); } runningStatusByte = temp; statusByteSet = true; } } return(MidiExport.WriteChunk("MTrk", data)); }