示例#1
0
        public void Write(MidiEvent midiEvent, MidiWriter writer, WritingSettings settings, bool writeStatusByte)
        {
            if (writeStatusByte)
            {
                writer.WriteByte(EventStatusBytes.Global.Meta);
            }

            //

            byte statusByte;

            var unknownMetaEvent = midiEvent as UnknownMetaEvent;

            if (unknownMetaEvent != null)
            {
                statusByte = unknownMetaEvent.StatusByte;
            }
            else
            {
                var eventType = midiEvent.GetType();
                if (!StandardEventTypes.Meta.TryGetStatusByte(eventType, out statusByte) && settings.CustomMetaEventTypes?.TryGetStatusByte(eventType, out statusByte) != true)
                {
                    Debug.Fail($"Unable to write the {eventType} event.");
                }
            }

            writer.WriteByte(statusByte);

            //

            var contentSize = midiEvent.GetSize(settings);

            writer.WriteVlqNumber(contentSize);
            midiEvent.Write(writer, settings);
        }
示例#2
0
 /// <summary>
 /// Writes content of a MIDI meta event.
 /// </summary>
 /// <param name="writer">Writer to write the content with.</param>
 /// <param name="settings">Settings according to which the event's content must be written.</param>
 protected override void WriteContent(MidiWriter writer, WritingSettings settings)
 {
     writer.WriteByte(Numerator);
     writer.WriteByte((byte)Math.Log(Denominator, 2));
     writer.WriteByte(ClocksPerClick);
     writer.WriteByte(ThirtySecondNotesPerBeat);
 }
示例#3
0
 /// <summary>
 /// Writes content of a MIDI event.
 /// </summary>
 /// <param name="writer">Writer to write the content with.</param>
 /// <param name="settings">Settings according to which the event's content must be written.</param>
 internal sealed override void Write(MidiWriter writer, WritingSettings settings)
 {
     foreach (var parameter in _parameters)
     {
         writer.WriteByte(parameter);
     }
 }
示例#4
0
        internal override void Write(MidiWriter writer, WritingSettings settings)
        {
            var component = Component;

            var componentValueMask = ComponentValueMasks[component];
            var componentValue     = ComponentValue & componentValueMask;

            var data = DataTypesUtilities.CombineAsFourBitNumbers((byte)component, (byte)componentValue);

            writer.WriteByte(data);
        }
示例#5
0
        public void Write(MidiEvent midiEvent, MidiWriter writer, WritingSettings settings, bool writeStatusByte)
        {
            if (writeStatusByte)
            {
                var statusByte = GetStatusByte(midiEvent);
                writer.WriteByte(statusByte);
            }

            //

            midiEvent.Write(writer, settings);
        }
        public void Write(MidiEvent midiEvent, MidiWriter writer, WritingSettings settings, bool writeStatusByte)
        {
            if (writeStatusByte)
            {
                var statusByte = GetStatusByte(midiEvent);
                writer.WriteByte(statusByte);
            }

            //

            var contentSize = midiEvent.GetSize(settings);

            writer.WriteVlqNumber(contentSize);
            midiEvent.Write(writer, settings);
        }
示例#7
0
        public void Write(MidiEvent midiEvent, MidiWriter writer, WritingSettings settings, bool writeStatusByte)
        {
            if (writeStatusByte)
            {
                var eventType = midiEvent.GetType();

                byte statusByte;
                if (!StandardEventTypes.SystemCommon.TryGetStatusByte(eventType, out statusByte))
                {
                    Debug.Fail($"Unable to write the {eventType} event.");
                }

                writer.WriteByte(statusByte);
            }

            midiEvent.Write(writer, settings);
        }
示例#8
0
        public void Write(MidiEvent midiEvent, MidiWriter writer, WritingSettings settings, bool writeStatusByte)
        {
            if (writeStatusByte)
            {
                var eventType = midiEvent.GetType();

                byte statusByte;
                if (!StandardEventTypes.SysEx.TryGetStatusByte(eventType, out statusByte))
                {
                    Debug.Fail($"Unable to write the {eventType} event.");
                }

                writer.WriteByte(statusByte);
            }

            //

            var contentSize = midiEvent.GetSize(settings);

            writer.WriteVlqNumber(contentSize);
            midiEvent.Write(writer, settings);
        }
示例#9
0
        public void Write(MidiEvent midiEvent, MidiWriter writer, WritingSettings settings, bool writeStatusByte)
        {
            if (writeStatusByte)
            {
                var eventType = midiEvent.GetType();

                byte statusByte;
                if (!StandardEventTypes.Channel.TryGetStatusByte(eventType, out statusByte))
                {
                    Debug.Fail($"Unable to write the {eventType} event.");
                }

                var channel = ((ChannelEvent)midiEvent).Channel;

                var totalStatusByte = DataTypesUtilities.Combine((FourBitNumber)statusByte, channel);
                writer.WriteByte(totalStatusByte);
            }

            //

            midiEvent.Write(writer, settings);
        }
 internal override void Write(MidiWriter writer, WritingSettings settings)
 {
     writer.WriteByte(_dataByte1);
 }
示例#11
0
 /// <summary>
 /// Writes content of a MIDI meta event.
 /// </summary>
 /// <param name="writer">Writer to write the content with.</param>
 /// <param name="settings">Settings according to which the event's content must be written.</param>
 protected override void WriteContent(MidiWriter writer, WritingSettings settings)
 {
     writer.WriteSByte(Key);
     writer.WriteByte(Scale);
 }
示例#12
0
 internal override void Write(MidiWriter writer, WritingSettings settings)
 {
     writer.WriteByte(Number);
 }
示例#13
0
 internal override void Write(MidiWriter writer, WritingSettings settings)
 {
     writer.WriteByte(_lsb);
     writer.WriteByte(_msb);
 }
示例#14
0
        public void Write(MidiEvent midiEvent, MidiWriter writer, WritingSettings settings, bool writeStatusByte)
        {
            if (writeStatusByte)
            {
                writer.WriteByte(EventStatusBytes.Global.Meta);
            }

            //

            byte statusByte = 0;

            switch (midiEvent.EventType)
            {
            case MidiEventType.Lyric:
                statusByte = EventStatusBytes.Meta.Lyric;
                break;

            case MidiEventType.SetTempo:
                statusByte = EventStatusBytes.Meta.SetTempo;
                break;

            case MidiEventType.Text:
                statusByte = EventStatusBytes.Meta.Text;
                break;

            case MidiEventType.SequenceTrackName:
                statusByte = EventStatusBytes.Meta.SequenceTrackName;
                break;

            case MidiEventType.PortPrefix:
                statusByte = EventStatusBytes.Meta.PortPrefix;
                break;

            case MidiEventType.TimeSignature:
                statusByte = EventStatusBytes.Meta.TimeSignature;
                break;

            case MidiEventType.SequencerSpecific:
                statusByte = EventStatusBytes.Meta.SequencerSpecific;
                break;

            case MidiEventType.KeySignature:
                statusByte = EventStatusBytes.Meta.KeySignature;
                break;

            case MidiEventType.Marker:
                statusByte = EventStatusBytes.Meta.Marker;
                break;

            case MidiEventType.ChannelPrefix:
                statusByte = EventStatusBytes.Meta.ChannelPrefix;
                break;

            case MidiEventType.InstrumentName:
                statusByte = EventStatusBytes.Meta.InstrumentName;
                break;

            case MidiEventType.CopyrightNotice:
                statusByte = EventStatusBytes.Meta.CopyrightNotice;
                break;

            case MidiEventType.SmpteOffset:
                statusByte = EventStatusBytes.Meta.SmpteOffset;
                break;

            case MidiEventType.DeviceName:
                statusByte = EventStatusBytes.Meta.DeviceName;
                break;

            case MidiEventType.CuePoint:
                statusByte = EventStatusBytes.Meta.CuePoint;
                break;

            case MidiEventType.ProgramName:
                statusByte = EventStatusBytes.Meta.ProgramName;
                break;

            case MidiEventType.SequenceNumber:
                statusByte = EventStatusBytes.Meta.SequenceNumber;
                break;

            case MidiEventType.EndOfTrack:
                statusByte = EventStatusBytes.Meta.EndOfTrack;
                break;

            case MidiEventType.UnknownMeta:
                statusByte = ((UnknownMetaEvent)midiEvent).StatusByte;
                break;

            default:
            {
                var eventType = midiEvent.GetType();
                if (settings.CustomMetaEventTypes?.TryGetStatusByte(eventType, out statusByte) != true)
                {
                    Debug.Fail($"Unable to write the {eventType} event.");
                }
            }
            break;
            }

            writer.WriteByte(statusByte);

            //

            var contentSize = midiEvent.GetSize(settings);

            writer.WriteVlqNumber(contentSize);
            midiEvent.Write(writer, settings);
        }