Exemple #1
0
        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);
        }
Exemple #2
0
        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));
        }