Path: blob/master/Sanford.Multimedia.Midi/Messages/SysRealtimeMessage.cs
180 views
#region License /* Copyright (c) 2005 Leslie Sanford * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #endregion #region Contact /* * Leslie Sanford * Email: [email protected] */ #endregion using System; using System.ComponentModel; using System.Diagnostics; namespace Sanford.Multimedia.Midi { #region System Realtime Message Types /// <summary> /// Defines constants representing the various system realtime message types. /// </summary> public enum SysRealtimeType { /// <summary> /// Represents the clock system realtime type. /// </summary> Clock = 0xF8, /// <summary> /// Represents the tick system realtime type. /// </summary> Tick, /// <summary> /// Represents the start system realtime type. /// </summary> Start, /// <summary> /// Represents the continue system realtime type. /// </summary> Continue, /// <summary> /// Represents the stop system realtime type. /// </summary> Stop, /// <summary> /// Represents the active sense system realtime type. /// </summary> ActiveSense = 0xFE, /// <summary> /// Represents the reset system realtime type. /// </summary> Reset } #endregion /// <summary> /// Represents MIDI system realtime messages. /// </summary> /// <remarks> /// System realtime messages are MIDI messages that are primarily concerned /// with controlling and synchronizing MIDI devices. /// </remarks> [ImmutableObject(true)] public sealed class SysRealtimeMessage : ShortMessage { #region SysRealtimeMessage Members #region System Realtime Messages /// <summary> /// The instance of the system realtime start message. /// </summary> public static readonly SysRealtimeMessage StartMessage = new SysRealtimeMessage(SysRealtimeType.Start); /// <summary> /// The instance of the system realtime continue message. /// </summary> public static readonly SysRealtimeMessage ContinueMessage = new SysRealtimeMessage(SysRealtimeType.Continue); /// <summary> /// The instance of the system realtime stop message. /// </summary> public static readonly SysRealtimeMessage StopMessage = new SysRealtimeMessage(SysRealtimeType.Stop); /// <summary> /// The instance of the system realtime clock message. /// </summary> public static readonly SysRealtimeMessage ClockMessage = new SysRealtimeMessage(SysRealtimeType.Clock); /// <summary> /// The instance of the system realtime tick message. /// </summary> public static readonly SysRealtimeMessage TickMessage = new SysRealtimeMessage(SysRealtimeType.Tick); /// <summary> /// The instance of the system realtime active sense message. /// </summary> public static readonly SysRealtimeMessage ActiveSenseMessage = new SysRealtimeMessage(SysRealtimeType.ActiveSense); /// <summary> /// The instance of the system realtime reset message. /// </summary> public static readonly SysRealtimeMessage ResetMessage = new SysRealtimeMessage(SysRealtimeType.Reset); #endregion // Make construction private so that a system realtime message cannot // be constructed directly. private SysRealtimeMessage(SysRealtimeType type) { msg = (int)type; #region Ensure Debug.Assert(SysRealtimeType == type); #endregion } #region Methods /// <summary> /// Returns a value for the current SysRealtimeMessage suitable for use in /// hashing algorithms. /// </summary> /// <returns> /// A hash code for the current SysRealtimeMessage. /// </returns> public override int GetHashCode() { return msg; } /// <summary> /// Determines whether two SysRealtimeMessage instances are equal. /// </summary> /// <param name="obj"> /// The SysRealtimeMessage to compare with the current SysRealtimeMessage. /// </param> /// <returns> /// <b>true</b> if the specified SysRealtimeMessage is equal to the current /// SysRealtimeMessage; otherwise, <b>false</b>. /// </returns> public override bool Equals(object obj) { #region Guard if(!(obj is SysRealtimeMessage)) { return false; } #endregion SysRealtimeMessage message = (SysRealtimeMessage)obj; return this.msg == message.msg; } #endregion #region Properties /// <summary> /// Gets the SysRealtimeType. /// </summary> public SysRealtimeType SysRealtimeType { get { return (SysRealtimeType)msg; } } /// <summary> /// Gets the MessageType. /// </summary> public override MessageType MessageType { get { return MessageType.SystemRealtime; } } #endregion #endregion } }