/// <summary> /// The divide. /// </summary> /// <param name="congenericTrack"> /// The congeneric track. /// </param> /// <param name="paramPauseTreatment"> /// The param pause treatment. /// параметр как учитывать паузу : /// игнорировать, звуковой след предыдущего звука, вырожденныый звук /// </param> /// <param name="paramEqualFM"> /// The param equal fm. /// как сравнивать ф-мотивы с секвентым переносом, либо нет /// </param> /// <returns> /// The <see cref="FmotivChain"/>. /// </returns> public FmotivChain Divide(CongenericScoreTrack congenericTrack, ParamPauseTreatment paramPauseTreatment, ParamEqualFM paramEqualFM) { // сохраняем имя цепи фмотивов как имя монотрека var priorityDiscover = new PriorityDiscover(); var fmotivDivider = new FmotivDivider(); var fmotivIdentifier = new FmotivIdentifier(); // подсчет приоритетов priorityDiscover.Calculate(congenericTrack); // разбиение FmotivChain chain = fmotivDivider.GetDivision(congenericTrack, paramPauseTreatment); // нахождение одинаковых return fmotivIdentifier.GetIdentification(chain, paramPauseTreatment, paramEqualFM); }
public void FmotivDividerEighthTest() { // создание и заполнения списка(ов) нот для такта(ов) монотрека var notes = new List<ValueNote> { new ValueNote(new Pitch(3, 'A', 0), new Duration(1, 8, false, 256), false, Tie.None, 0), new ValueNote(new Pitch(3, 'B', 0), new Duration(1, 8, false, 256), false, Tie.None, 2), new ValueNote((Pitch)null, new Duration(1, 8, false, 256), false, Tie.None, 1), new ValueNote(new Pitch(3, 'B', 0), new Duration(1, 8, false, 256), false, Tie.None, 2) }; // создание атрибутов для такта(ов) var attributes = new Attributes(new Size(2, 4, 1024), new Key(0, "major")); // создание и заполнение такта(ов) списками нот и атрибутами var measures = new List<Measure> { new Measure(notes, (Attributes)attributes.Clone()) }; // создание моно трека var unitrack = new CongenericScoreTrack("track1", measures); // создание объекта для деления монотрека на фмотивы var fmdivider = new FmotivDivider(); // создание результирующей цепочки фмотивов // вычисление, опрделение, разбиение на ф-мотивы данного монотрека FmotivChain fmchain = fmdivider.GetDivision(unitrack, (int)ParamPauseTreatment.Ignore); fmchain.Id = 0; // создание аналогов ф-мотивов, которые должны получиться, после разбиения // процедура определения одинаковых на данном этапе не производится var fmotiv1 = new Fmotiv("ПМТ", 0); fmotiv1.NoteList.Add(new ValueNote(new Pitch(3, 'A', 0), new Duration(1, 8, false, 256), false, Tie.None)); fmotiv1.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 8, false, 256), false, Tie.None)); fmotiv1.NoteList.Add(new ValueNote(new Pitch(3, 'B', 0), new Duration(1, 8, false, 256), false, Tie.None)); fmotiv1.NoteList.Add(new ValueNote(new Pitch(3, 'B', 0), new Duration(1, 8, false, 256), false, Tie.None)); // записываем ф-мотивы в цепь ф-мотивов, которая будет сравниваться с получившейся var fmchain1 = new FmotivChain { Id = 0, Name = "track1" }; fmchain1.FmotivList.Add(fmotiv1); Assert.IsTrue(fmchain1.Equals(fmchain)); }