private void GetStructure() { int j = 0, k = 0; //index to halfbar/beat segments list for (int i = 0; i < ListCIBar.Count; i++) { clsBarSubHB bar = new clsBarSubHB(ListCIBar[i]); for (; j < ListCIHalfBar.Count; j++) { if (ListCIHalfBar[j].Segment.SegQILo > ListCIBar[i].Segment.SegQIHi) { break; } clsHBSubBeat halfbar = new clsHBSubBeat(ListCIHalfBar[j]); bar.CIHalfBars.Add(halfbar); for (; k < ListCIBeat.Count; k++) { if (ListCIBeat[k].Segment.SegQILo > ListCIHalfBar[j].Segment.SegQIHi) { break; } halfbar.CIBeats.Add(ListCIBeat[k]); } } Bars.Add(bar); } }
internal clsCompScores(clsBarSubHB bar) { Bar = bar.CIBar.NullableScore; HB1 = bar.CIHalfBars[0].CIHalfBar.NullableScore; //HB2 = bar.CIHalfBars[1].CIHalfBar.NullableScore; HB2 = GetRemHalfBarsAvg(bar); //allowing for odd tsig Beats1 = GetBeatsAvg(bar.CIHalfBars[0].CIBeats); if (bar.CIHalfBars.Count > 1) { Beats2 = GetBeatsAvg(bar.CIHalfBars[1].CIBeats); } }
private void SelectAlign() { //* create listci from ListCIArr[0/1] ListCI = new List <clsChordInfo>(250); //final chord list if (Align == eAlign.Auto) { //* create listci... from listciarr[0/1/2] ListCIBar = ListCIArr[0]; ListCIHalfBar = ListCIArr[1]; ListCIBeat = ListCIArr[2]; Bars = new List <clsBarSubHB>(250); //* get bar/halfbar/beat structure GetStructure(); //* calculate minimum unweighted scores MinScores = new List <clsCompScores>(250); for (int b = 0; b < Bars.Count; b++) { clsBarSubHB bar = Bars[b]; clsCompScores min = new clsCompScores(bar); MinScores.Add(min); if (MinScores.Count != b + 1) { LogicError.Throw(eLogicError.X086); } } //* calculate weighted bar score combinations CalcWeightedScores(); int hbindex = 0, beatindex = 0; for (int bar = 0; bar < Bars.Count; bar++) { clsWeightedScores w = WeightedScores[bar]; clsChordInfo[] cibar = w.MaxCombo.SelectAuto(bar); if (DebugChords) { DebugBarScores(ref hbindex, ref beatindex, bar); DebugComboScore(bar, cibar); } ListCI.AddRange(cibar); } } else { ListCI = ListCIArr[0]; } }
private int?GetRemHalfBarsAvg(clsBarSubHB bar) { //* get avg halfbar score for 2nd. and subsequent halfbars (esp. odd tsigs) int tot = 0; for (int i = 1; i < bar.CIHalfBars.Count; i++) //start at 2nd { int?nscore = bar.CIHalfBars[i].CIHalfBar.NullableScore; if (!nscore.HasValue) { return(null); } tot += nscore.Value; } return(tot / bar.CIHalfBars.Count - 1); }
private int?GetRemHalfBarsMin(clsBarSubHB bar) { //* get min halfbar score for 2nd. and subsequent halfbars (esp. odd tsigs) int minval = int.MaxValue; for (int i = 1; i < bar.CIHalfBars.Count; i++) { int?nscore = bar.CIHalfBars[i].CIHalfBar.NullableScore; if (!nscore.HasValue) { return(null); } minval = Math.Min(minval, nscore.Value); } return(minval); }