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); }
/// <summary> /// Writes content of a <see cref="TrackChunk"/>. /// </summary> /// <remarks> /// Content of a <see cref="TrackChunk"/> is collection of MIDI events. /// </remarks> /// <param name="writer">Writer to write the chunk's content with.</param> /// <param name="settings">Settings according to which the chunk's content must be written.</param> /// <exception cref="ObjectDisposedException">Method was called after the writer's underlying stream was disposed.</exception> /// <exception cref="IOException">An I/O error occurred on the writer's underlying stream.</exception> protected override void WriteContent(MidiWriter writer, WritingSettings settings) { ProcessEvents(settings, (eventWriter, midiEvent, writeStatusByte) => { writer.WriteVlqNumber(midiEvent.DeltaTime); eventWriter.Write(midiEvent, writer, settings, writeStatusByte); }); }
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); }
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); }
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); }