public MidiModuleDefinition RegisterOrUpdate(SoundFont sf2) { var existing = Modules.FirstOrDefault (m => m.Name == sf2.FileInfo.BankName); if (existing != null) return existing; var mod = new MidiModuleDefinition (); mod.Name = sf2.FileInfo.BankName; // only one map for one sf2. var map = new MidiInstrumentMap () { Name = sf2.FileInfo.BankName }; mod.Instrument.Maps.Add (map); foreach (var preset in sf2.Presets.OrderBy (p => p.PatchNumber).ThenBy (p => p.Bank)) { var prog = map.Programs.FirstOrDefault (p => p.Index == preset.PatchNumber); if (prog == null) { prog = new MidiProgramDefinition () { Index = preset.PatchNumber, Name = preset.Name }; map.Programs.Add (prog); } prog.Banks.Add (new MidiBankDefinition () { Name = preset.Name, Msb = preset.Bank }); } Modules.Add (mod); return mod; }
public DefaultMidiModuleDatabase() { Modules = new List <MidiModuleDefinition>(); var catalog = new StreamReader(GetResource("midi-module-catalog.txt")).ReadToEnd().Split('\n'); foreach (string filename in catalog.Select(s => s.Trim())) // strip extraneous \r { if (filename.Length > 0) { Modules.Add(MidiModuleDefinition.Load(GetResource(filename))); } } }
public MidiModuleDefinition Import(string file) { var doc = XDocument.Load(file); var mod = doc.Element("ModuleData"); var mdd = new MidiModuleDefinition() { Name = mod.Attr("Name") }; LoadMaps(mod, "InstrumentList", mdd.Instrument.Maps); LoadMaps(mod, "DrumSetList", mdd.Instrument.DrumMaps); return(mdd); }
public MidiModuleDefinition Import(string file) { var doc = XDocument.Load(file); var mod = doc.Element("ModuleData"); var mdd = new MidiModuleDefinition() { Name = mod.Attr("Name") }; foreach (var ilist in mod.Elements("InstrumentList")) { foreach (var map in ilist.Elements("Map")) { var mad = new MidiInstrumentMap() { Name = map.Attr("Name") }; mdd.Instrument.Maps.Add(mad); foreach (var pc in map.Elements("PC")) { var pd = new MidiProgramDefinition() { Name = pc.Attr("Name"), Index = pc.AttrAsInt("PC") - 1 }; // the domino XML index begins with 1 up to 128, so decrease here. mad.Programs.Add(pd); foreach (var bank in pc.Elements("Bank")) { if (bank.Attr("MSB") == null) { // Domino XML definition contains extra bank element that mimics mapping. We have to skip it. continue; } pd.Banks.Add(new MidiBankDefinition() { Name = bank.Attr("Name"), Msb = bank.AttrAsInt("MSB"), Lsb = bank.AttrAsInt("LSB") }); } } } } return(mdd); }
public MidiModuleDefinition Import(string file) { var doc = XDocument.Load (file); var mod = doc.Element ("ModuleData"); var mdd = new MidiModuleDefinition () { Name = mod.Attr ("Name") }; foreach (var ilist in mod.Elements ("InstrumentList")) foreach (var map in ilist.Elements ("Map")) { var mad = new MidiInstrumentMap () { Name = map.Attr ("Name") }; mdd.Instrument.Maps.Add (mad); foreach (var pc in map.Elements ("PC")) { var pd = new MidiProgramDefinition () { Name = pc.Attr ("Name"), Index = pc.AttrAsInt ("PC") }; mad.Programs.Add (pd); foreach (var bank in pc.Elements ("Bank")) { if (bank.Attr ("MSB") == null) // Domino XML definition contains extra bank element that mimics mapping. We have to skip it. continue; pd.Banks.Add (new MidiBankDefinition () { Name = bank.Attr ("Name"), Msb = bank.AttrAsInt ("MSB"), Lsb = bank.AttrAsInt ("LSB") }); } } } return mdd; }