private static IEnumerable <DrumPreset> DrumLoad(XDocument document) { var preset = document.Elements("ux").Select(e => e.Elements("preset")).Select(e => e.Elements("drum")).FirstOrDefault(); if (preset == null) { throw new ArgumentException(); } var notes = preset.Elements("note"); foreach (var note in notes) { var number = note.GetAttribute(PresetReader.xnumber); var note_number = note.GetAttribute(PresetReader.xnote); int num = 0, note_num = 0; if (!int.TryParse(number, out num)) { throw new ArgumentException(); } if (!int.TryParse(note_number, out note_num)) { throw new ArgumentException(); } yield return(new DrumPreset(num, note_num, note.Elements() .Where(h => h.Name.LocalName.ToLower() != "final") .Select(h => HandleCreator.Create(h.Name.LocalName.ToLower(), h.GetAttribute(PresetReader.xtype), h.GetAttribute(PresetReader.xvalue))))); } }
private static int ParseOperators(HandleType type, string operators) { int result = 0; int tmp; foreach (var op in operators.Split(',')) { result |= (int.TryParse(op, out tmp)) ? tmp : HandleCreator.ParseOperator(type, op); } return(result); }
private static IEnumerable <ProgramPreset> Load(XDocument document) { var preset = document.Elements("ux").Select(e => e.Elements("preset")).FirstOrDefault(); if (preset == null) { throw new ArgumentException(); } var programs = preset.Elements("program"); foreach (var program in programs) { var number = program.GetAttribute(PresetReader.xnumber); var str_msb = program.GetAttribute(PresetReader.xmsb); var str_lsb = program.GetAttribute(PresetReader.xlsb); int num = 0, msb = 0, lsb = 0; if (!int.TryParse(number, out num)) { throw new ArgumentException(); } if (!string.IsNullOrWhiteSpace(str_msb) && !int.TryParse(str_msb, out msb)) { throw new ArgumentException(); } if (!string.IsNullOrWhiteSpace(str_lsb) && !int.TryParse(str_lsb, out lsb)) { throw new ArgumentException(); } if (program.Elements(PresetReader.xfinal).Count() > 1) { throw new ArgumentException(); } yield return(new ProgramPreset(num, msb, lsb, program.Elements() .Where(h => h.Name.LocalName.ToLower() != "final") .Select(h => HandleCreator.Create(h.Name.LocalName.ToLower(), h.GetAttribute(PresetReader.xtype), h.GetAttribute(PresetReader.xvalue))), program.Elements(PresetReader.xfinal) .SelectMany(f => f.Elements()) .Select(h => HandleCreator.Create(h.Name.LocalName.ToLower(), h.GetAttribute(PresetReader.xtype), h.GetAttribute(PresetReader.xvalue))))); } }
/// <summary> /// ハンドル名、タイプ、値から新しいハンドルを生成します。 /// </summary> /// <param name="name">ハンドル名。</param> /// <param name="type">タイプ。</param> /// <param name="value">値。</param> /// <returns></returns> public static Handle Create(string name, string type, string value) { HandleType handleType; int data1; float data2; if (!Enum.TryParse(name, true, out handleType)) { throw new ArgumentException(); } data1 = (string.IsNullOrWhiteSpace(type)) ? 0 : HandleCreator.ParseOperators(handleType, type); if (string.IsNullOrWhiteSpace(value)) { data2 = 0.0f; } else if (!float.TryParse(value, out data2)) { throw new ArgumentException(); } return(new Handle(0, handleType, data1, data2)); }