示例#1
0
        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);
            }
        }
示例#2
0
 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);
     }
 }
示例#3
0
        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];
            }
        }
示例#4
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);
            }
示例#5
0
            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);
            }