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); }
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); } } }
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()); }