예제 #1
0
        public ParsedMidiMessage ParseMsg(int inChannel, int inValue, int inStatus, int inControl, string inMsg)
        {
            string            msg = inMsg;
            ParsedMidiMessage Rc  = new ParsedMidiMessage();

            if (msg.Length != 6)
            {
                Rc.ErrMsg = string.Format("Msg:{0} {1}", inMsg, "Must be 6 characters long.");
                return(Rc);
            }
            if (msg.Contains("SS"))
            {
                if (msg.Substring(0, 2) != "SS")
                {
                    Rc.ErrMsg = string.Format("Msg:{0} {1}", inMsg, "SS must be the 1st and 2nd characters.");
                    return(Rc);
                }
                msg = msg.Replace("SS", inStatus.ToString("X2"));
            }
            if (msg.Contains("YY"))
            {
                if (msg.Substring(2, 2) != "YY")
                {
                    Rc.ErrMsg = string.Format("Msg:{0} {1}", inMsg, "YY must be the 3rd & 4th characters.");
                    return(Rc);
                }
                msg = msg.Replace("YY", inControl.ToString("X2"));
            }
            if (msg.Contains("VV"))
            {
                if (msg.Substring(4, 2) != "VV")
                {
                    Rc.ErrMsg = string.Format("Msg:{0} {1}", inMsg, "VV must be the 5th & 6th characters.");
                    return(Rc);
                }
                msg = msg.Replace("VV", inValue.ToString("X2"));
            }
            msg = msg.Replace("X", inChannel.ToString());
            string sEvent   = msg.Substring(0, 1);
            string sChannel = msg.Substring(1, 1);
            string sData1   = msg.Substring(2, 2);
            string sData2   = msg.Substring(4, 2);

            try
            {
                Rc.Event   = Int32.Parse(sEvent, System.Globalization.NumberStyles.HexNumber);
                Rc.Channel = Int32.Parse(sChannel, System.Globalization.NumberStyles.HexNumber);
                Rc.Data1   = Int32.Parse(sData1, System.Globalization.NumberStyles.HexNumber);
                Rc.Data2   = Int32.Parse(sData2, System.Globalization.NumberStyles.HexNumber);
                Rc.Valid   = true;
            }
            catch
            {
                Rc.ErrMsg = string.Format("Msg:{0} {1}", inMsg, "contains invalid hexideciaml characters.");
            }
            return(Rc);
        }
예제 #2
0
 public void SendMsg(int inChannel, int inValue, int inStatus, int inControl, string inMessages)
 {
     char[]   parms    = { ' ', ',', ';', ':' };
     string[] messages = inMessages.Split(parms, StringSplitOptions.RemoveEmptyEntries);
     foreach (string msg in messages)
     {
         ParsedMidiMessage parsedMsg = ParseMsg(inChannel, inValue, inStatus, inControl, msg);
         if (parsedMsg.Valid)
         {
             SendMsg(parsedMsg.Event, parsedMsg.Channel, parsedMsg.Data1, parsedMsg.Data2);
         }
     }
 }
예제 #3
0
        public string[] ValidateMidiMessages(string inMessages)
        {
            List <string> Errors = new List <string>();

            char[]   parms    = { ' ', ',', ';', ':' };
            string[] messages = inMessages.Split(parms, StringSplitOptions.RemoveEmptyEntries);
            foreach (string msg in messages)
            {
                ParsedMidiMessage parsedMsg = ParseMsg(0, 0, 0, 0, msg);
                if (parsedMsg.Valid == false)
                {
                    Errors.Add(parsedMsg.ErrMsg);
                }
            }
            return(Errors.ToArray());
        }