#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: jabberdabber@hotmail.com */ #endregion using System; using System.ComponentModel; using System.Diagnostics; namespace Sanford.Multimedia.Midi { #region System Common Message Types /// /// Defines constants representing the various system common message types. /// public enum SysCommonType { /// /// Represents the MTC system common message type. /// MidiTimeCode = 0xF1, /// /// Represents the song position pointer type. /// SongPositionPointer, /// /// Represents the song select type. /// SongSelect, /// /// Represents the tune request type. /// TuneRequest = 0xF6 } #endregion /// /// Represents MIDI system common messages. /// [ImmutableObject(true)] public sealed class SysCommonMessage : ShortMessage { #region SysCommonMessage Members #region Construction /// /// Initializes a new instance of the SysCommonMessage class with the /// specified type. /// /// /// The type of SysCommonMessage. /// public SysCommonMessage(SysCommonType type) { msg = (int)type; #region Ensure Debug.Assert(SysCommonType == type); #endregion } /// /// Initializes a new instance of the SysCommonMessage class with the /// specified type and the first data value. /// /// /// The type of SysCommonMessage. /// /// /// The first data value. /// /// /// If data1 is less than zero or greater than 127. /// public SysCommonMessage(SysCommonType type, int data1) { msg = (int)type; msg = PackData1(msg, data1); #region Ensure Debug.Assert(SysCommonType == type); Debug.Assert(Data1 == data1); #endregion } /// /// Initializes a new instance of the SysCommonMessage class with the /// specified type, first data value, and second data value. /// /// /// The type of SysCommonMessage. /// /// /// The first data value. /// /// /// The second data value. /// /// /// If data1 or data2 is less than zero or greater than 127. /// public SysCommonMessage(SysCommonType type, int data1, int data2) { msg = (int)type; msg = PackData1(msg, data1); msg = PackData2(msg, data2); #region Ensure Debug.Assert(SysCommonType == type); Debug.Assert(Data1 == data1); Debug.Assert(Data2 == data2); #endregion } internal SysCommonMessage(int message) { this.msg = message; } #endregion #region Methods /// /// Returns a value for the current SysCommonMessage suitable for use /// in hashing algorithms. /// /// /// A hash code for the current SysCommonMessage. /// public override int GetHashCode() { return msg; } /// /// Determines whether two SysCommonMessage instances are equal. /// /// /// The SysCommonMessage to compare with the current SysCommonMessage. /// /// /// true if the specified SysCommonMessage is equal to the /// current SysCommonMessage; otherwise, false. /// public override bool Equals(object obj) { #region Guard if(!(obj is SysCommonMessage)) { return false; } #endregion SysCommonMessage message = (SysCommonMessage)obj; return (this.SysCommonType == message.SysCommonType && this.Data1 == message.Data1 && this.Data2 == message.Data2); } #endregion #region Properties /// /// Gets the SysCommonType. /// public SysCommonType SysCommonType { get { return (SysCommonType)UnpackStatus(msg); } } /// /// Gets the first data value. /// public int Data1 { get { return UnpackData1(msg); } } /// /// Gets the second data value. /// public int Data2 { get { return UnpackData2(msg); } } /// /// Gets the MessageType. /// public override MessageType MessageType { get { return MessageType.SystemCommon; } } #endregion #endregion } }