public static MidiMappingRules LoadFromXml(string fileName)
        {
            MidiMappingRules mappingRules = new MidiMappingRules();
            XmlDocument      xmlDocument  = new XmlDocument();

            xmlDocument.Load(fileName);
            if (xmlDocument.DocumentElement.Name != RootElementName)
            {
                // this is some other type of XML file
                return(null);
            }
            foreach (XmlNode ruleNode in xmlDocument.DocumentElement.ChildNodes)
            {
                if (ruleNode.Name == "NoteMap")
                {
                    NoteMap mappingRule = NoteMap.LoadFromXmlNode(ruleNode);
                    mappingRules.noteRules.Add(mappingRule);
                }
                else if (ruleNode.Name == "Exclude")
                {
                    ExcludeRule excludeRule = ExcludeRule.LoadFromXmlNode(ruleNode);
                    mappingRules.excludeRules.Add(excludeRule);
                }
                else if (ruleNode.Name == "ControllerMap")
                {
                    ControllerMap controllerMap = ControllerMap.LoadFromXmlNode(ruleNode);
                    mappingRules.eventRules.Add(controllerMap);
                }
                else if (ruleNode.Name == "AfterTouchMap")
                {
                    AfterTouchMap afterTouchMap = AfterTouchMap.LoadFromXmlNode(ruleNode);
                    mappingRules.eventRules.Add(afterTouchMap);
                }
                else if (ruleNode.Name == "PitchWheelMap")
                {
                    PitchWheelMap pitchWheelMap = PitchWheelMap.LoadFromXmlNode(ruleNode);
                    mappingRules.eventRules.Add(pitchWheelMap);
                }
                else if (ruleNode.Name == "TextMap")
                {
                    TextMap map = TextMap.LoadFromXmlNode(ruleNode);
                    mappingRules.eventRules.Add(map);
                }
                else if (ruleNode.Name == "Insert")
                {
                    InsertRule insertRule = InsertRule.LoadFromXmlNode(ruleNode);
                    mappingRules.insertEvents.Add(insertRule.Apply(null));
                }
                else if (ruleNode.Name == GeneralSettingsElementName)
                {
                    foreach (XmlAttribute attribute in ruleNode.Attributes)
                    {
                        mappingRules.generalProperties.Add(attribute.Name, attribute.Value);
                    }
                    // TODO: could check that property names are as expected and validate any
                    // non-string ones
                }
            }
            return(mappingRules);
        }
        public static MidiMappingRules LoadFromCubaseDrumMap(string fileName)
        {
            MidiMappingRules mappingRules = new MidiMappingRules();
            XmlDocument      xmlDocument  = new XmlDocument();

            xmlDocument.Load(fileName);
            if (xmlDocument.DocumentElement.Name != "DrumMap")
            {
                // this is some other type of XML file
                return(null);
            }
            foreach (XmlNode mapNode in xmlDocument.DocumentElement.ChildNodes)
            {
                if (mapNode.Name == "list" && mapNode.Attributes["name"].Value == "Map")
                {
                    foreach (XmlNode itemNode in mapNode.ChildNodes)
                    {
                        if (itemNode.Name == "item")
                        {
                            NoteMap mappingRule = new NoteMap();
                            foreach (XmlNode node in itemNode.ChildNodes)
                            {
                                string name = node.Attributes["name"].Value;
                                if (name == "INote")
                                {
                                    mappingRule.InNotes = new InputValueParameters(node.Attributes["value"].Value);
                                }
                                else if (name == "Channel")
                                {
                                    mappingRule.OutChannel = new NoteEventOutputParameters((Int32.Parse(node.Attributes["value"].Value) + 1).ToString(), 1, 16);
                                }
                                else if (name == "ONote")
                                {
                                    mappingRule.OutNote = new NoteEventOutputParameters(node.Attributes["value"].Value, 0, 127);
                                }
                                else if (name == "Name")
                                {
                                    mappingRule.Name = node.Attributes["value"].Value;
                                }

                                // TODO: consider support for:
                                // Length (float)  not exactly sure what this is - 200 a common value
                                // Mute  - mutes this note?
                                // DisplayNote - ?
                                // HeadSymbol
                                // Voice
                                // PortIndex
                                // QuantizeIndex
                            }
                            mappingRules.noteRules.Add(mappingRule);
                        }
                    }
                }
            }
            return(mappingRules);
        }
        public static MidiMappingRules LoadFromCakewalkDrumMap(string fileName)
        {
            MidiMappingRules mappingRules = new MidiMappingRules();

            CakewalkMapFile map = new CakewalkMapFile(fileName);

            foreach (CakewalkDrumMapping mapping in map.DrumMappings)
            {
                NoteMap mappingRule = new NoteMap();
                mappingRule.Name        = mapping.NoteName;
                mappingRule.InNotes     = new InputValueParameters(mapping.InNote);
                mappingRule.OutChannel  = new NoteEventOutputParameters(mapping.Channel);
                mappingRule.OutNote     = new NoteEventOutputParameters(mapping.OutNote);
                mappingRule.OutVelocity = new NoteEventOutputParameters(mapping.VelocityAdjust, (int)mapping.VelocityScale, 0, 127);
                // TODO: support out velocity scaling
                mappingRules.noteRules.Add(mappingRule);
            }
            return(mappingRules);
        }
Example #4
0
        public bool ValidatePage()
        {
            ComboItem selectedItem = (ComboItem)listBoxMapping.SelectedItem;

            if (selectedItem == null)
            {
                MessageBox.Show("Please select a mapping file to use first",
                                Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return(false);
            }

            try
            {
                if (selectedItem.FileName.ToLower().EndsWith(".xml"))
                {
                    this.mappingRules = MidiMappingRules.LoadFromXml(selectedItem.FileName);
                }
                else if (selectedItem.FileName.ToLower().EndsWith(".map"))
                {
                    this.mappingRules = MidiMappingRules.LoadFromCakewalkDrumMap(selectedItem.FileName);
                }
                else if (selectedItem.FileName.ToLower().EndsWith(".drm"))
                {
                    this.mappingRules = MidiMappingRules.LoadFromCubaseDrumMap(selectedItem.FileName);
                }
                else
                {
                    throw new NotSupportedException(String.Format("{0} is not a supported map format", selectedItem.FileName));
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(
                    String.Format("Error Loading Map\r\n{0}", e.Message),
                    Application.ProductName,
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Warning);
                return(false);
            }
            Settings.Default.LastSelectedMapping = selectedItem.FileName;
            return(true);
        }
 public ProcessFilesThreadParams(MidiMappingRules mappingRules, List <string> selectedFiles)
 {
     this.mappingRules  = mappingRules;
     this.selectedFiles = selectedFiles;
 }
 public MidiFileMapper(MidiMappingRules mappingRules, List <string> filesToConvert)
 {
     this.filesToConvert = filesToConvert;
     this.mappingRules   = mappingRules;
     this.settings       = Settings.Default;
 }
 public MidiFileMapper(MidiMappingRules mappingRules)
     : this(mappingRules, null)
 {
 }