Exemple #1
0
            internal clsBBT GetRoundDownToBar() //return newbbt - does not change this
            {
                clsBBT bbt = Copy();

                bbt.RoundDownToBar();
                return(bbt);
            }
Exemple #2
0
            internal clsBBT GetRoundUpToBeatAlt() //return newbbt - does not change this
            {
                clsBBT bbt = Copy();

                bbt.RoundUpToBeatAlt();
                return(bbt);
            }
Exemple #3
0
            internal clsBBT GetNextHalfBar()
            {
                clsBBT bbt = Copy();

                bbt.NextHalfBar();
                return(bbt);
            }
Exemple #4
0
            internal void RoundUpToHalfBar()
            {
                if (TSig.NN % 2 == 1) //odd tsig (eg 3/4)
                //RoundUpToBar();
                {
                    RoundUpToBeat();
                    return;
                }
                //if (Twelfth == 0 && (TSig.NN == 0 || TSig.NN == 2)) return;
                //NextHalfBar();
                if (TicksRemBar == 0)
                {
                    return;
                }
                clsBBT bbthb = new clsBBT(Bar, TSig.NN / 2, 0); //on halfbar

                if (TicksRemBar > bbthb.TicksRemBar)
                {
                    NewBBT(Bar + 1, 0, 0);                           //in second halfbar
                }
                else if (TicksRemBar < bbthb.TicksRemBar)
                {
                    NewBBT(Bar, TSig.NN / 2, 0);                                //in first halfbar
                }
                //* else on halfbar - no change
            }
Exemple #5
0
            internal clsBBT GetPrevHalfBar()
            {
                clsBBT bbt = Copy();

                bbt.PrevHalfBar();
                return(bbt);
            }
Exemple #6
0
            internal clsBBT GetNextBeat() //return newbbt - does not change this
            {
                clsBBT bbt = Copy();

                bbt.NextBeat();
                return(bbt);
            }
Exemple #7
0
 protected void Init(int qilo, int qihi)
 {
     SegsQILo = RoundUpQI(qilo);
     SegsQIHi = RoundDownQI(qihi) - 1;
     SegQILo  = SegsQILo;
     //if (SegQILo < 0) Debugger.Break();  //temp
     SegBBTLo = new clsBBT(SegsQILo * TicksPerQI);
 }
Exemple #8
0
            protected override int RoundDownQI(int qi)
            {
                //* round down segshi to end global with a complete segment
                clsBBT bbt = (new clsBBT(qi * TicksPerQI));

                RoundDown(bbt);
                if (bbt.Ticks % TicksPerQI != 0)
                {
                    LogicError.Throw(eLogicError.X017);
                }
                return(bbt.Ticks / TicksPerQI);
            }
Exemple #9
0
            protected override int RoundUpQI(int qi)
            {
                //* round up segslo to start global at start of complete segment
                clsBBT bbt = (new clsBBT(qi * TicksPerQI));

                RoundUp(bbt);
                if (bbt.Ticks % TicksPerQI != 0)
                {
                    LogicError.Throw(eLogicError.X016);
                }
                return(bbt.Ticks / TicksPerQI);
            }
Exemple #10
0
            protected int NextSegQI()
            {
                int    qi  = SegQILo;
                clsBBT bbt = (new clsBBT(qi * TicksPerQI));

                NextSeg(bbt);
                if (bbt.Ticks % TicksPerQI != 0)
                {
                    LogicError.Throw(eLogicError.X026);
                }
                return(bbt.Ticks / TicksPerQI);
            }
Exemple #11
0
 protected void Incr()
 {
     SegQILo += SegQIWidth;
     SegBBTLo = new clsBBT(SegQILo);
     if (SegQIHi > SegsQIHi)
     {
         OOR = true;
     }
     else
     {
         OOR = false;
     }
 }
Exemple #12
0
 protected override void NextSeg(clsBBT bbt)
 {
     bbt.NextBeat();
 }
Exemple #13
0
 protected override void RoundDown(clsBBT bbt)
 {
     bbt.RoundDownToHalfBar();
 }
Exemple #14
0
 protected override void NextSeg(clsBBT bbt)
 {
     bbt.NextHalfBar();
 }
Exemple #15
0
        //internal void RemoveTSig(clsBBT bbtlo, clsBBT bbthi) {
        //  //* Validate
        //  if (bbtlo.Bar == bbthi.Bar) return;
        //  if (bbtlo.TicksRemBar != 0) throw new TSigException();
        //  if (bbthi != null && bbthi.TicksRemBar != 0) throw new TSigException();

        //  //* create tsig list up to selected area
        //  List<clsTSigBB> list = new List<clsTSigBB>();
        //  clsTSigBB tsigprev = null;
        //  int index = 0;
        //  for (; index < TSigs.Length; index++) {
        //    clsTSigBB tsig = TSigs[index];
        //    if (tsig.Tick >= bbtlo.Ticks) break;
        //    list.Add(tsig);
        //    tsigprev = tsig;
        //  }

        //  //* add tsigs after selected area
        //  int ticksdiff = bbthi.Ticks - bbtlo.Ticks;
        //  for (; index < TSigs.Length; index++) {
        //    clsTSigBB tsig = TSigs[index];
        //    int ticksnext = (index < TSigs.Length - 1) ? TSigs[index + 1].Tick : P.F.MaxBBT.Ticks;
        //    if (ticksnext <= bbthi.Ticks) continue;
        //    int ticksnew = Math.Max(bbtlo.Ticks, tsig.Tick - ticksdiff);
        //    tsig = new clsTSigBB(this, tsig, tsigprev, ticksnew);
        //    list.Add(tsig);
        //    tsigprev = tsig;
        //  }

        //  //* make live
        //  TSigs = list.ToArray();
        //  CheckTSigs();
        //}

        internal void ChangeTSig(int nn, int dd, clsBBT bbtlo, clsBBT bbthi)
        {
            //* Validate
            if (bbthi == null)
            {
                bbthi = P.F.MaxBBT.BBTCopy;
            }
            if (bbtlo.Bar == bbthi.Bar)
            {
                return;
            }
            if (bbtlo.TicksRemBar != 0)
            {
                throw new TSigException();
            }
            if (bbthi != null && bbthi.TicksRemBar != 0)
            {
                throw new TSigException();
            }

            //* create tsig list up to bbtlo
            List <clsTSigBB> list     = new List <clsTSigBB>();
            clsTSigBB        tsigprev = null;

            foreach (clsTSigBB tsig in TSigs)
            {
                if (tsig.Tick >= bbtlo.Ticks)
                {
                    break;
                }
                list.Add(tsig);
                tsigprev = tsig;
            }

            //* add new tsig
            clsTSigBB tsignew;

            try {
                tsignew = new clsTSigBB(this, nn, dd, bbtlo.Ticks, tsigprev, adj: false);
            }
            catch (TSigException) {
                return;
            }
            list.Add(tsignew);

            //* terminate or continue
            bool truncate = bbthi != null && bbthi.Bar == P.F.MaxBBT.Bar;

            if (bbthi == null || truncate) //truncate
            {
                TSigs = list.ToArray();
            }
            else //insert
            //* set up newmtime
            {
                clsMTime newmtime = new clsMTime(TicksPerQNote, TSigs[00].NN, TSigs[0].DD);
                newmtime.TSigs = list.ToArray(); //up to and incl. new tsig
                newmtime.CheckTSigs();           //=>TSigException (should not happen)

                //* filler bar required?
                clsTSig         tsigfiller = null;
                clsMTime.clsBBT bbttest    = new clsBBT(newmtime, bbthi.Ticks);
                if (bbttest.TicksRemBar > 0) //need a filler bar
                {
                    tsigfiller = GetFillerTSig(newmtime, bbttest.TicksRemBar);
                    if (tsigfiller == null)
                    {
                        throw new TSigException();
                    }
                    if (tsigfiller != null)
                    {
                        tsigprev = (list.Count > 0) ? list[list.Count - 1] : null;
                        list.Add(new clsTSigBB(tsigfiller, tsigprev, bbthi.Ticks - tsigfiller.TicksPerBar));
                        newmtime.TSigs = list.ToArray();
                    }
                }

                //* add tsigs after selected area
                int       index;
                clsTSigBB tsighi    = FindTSigTick(bbthi.Ticks, out index);
                clsTSigBB newtsighi = new clsTSigBB(newmtime, tsighi, newmtime.TSigs[newmtime.TSigs.Length - 1], bbthi.Ticks);
                list.Add(newtsighi);
                for (int i = index + 1; i < TSigs.Length; i++)
                {
                    clsTSigBB tsignewmtime = new clsTSigBB(newmtime, TSigs[i], list[list.Count - 1], TSigs[i].Tick);
                    list.Add(tsignewmtime);
                }

                //* make live
                newmtime.TSigs = list.ToArray();
                TSigs          = newmtime.TSigs;
            }
            CheckTSigs(); //=>TSigException (should not happen)
        }
Exemple #16
0
        internal int TicksToBeats(int ticks)
        {
            clsBBT bbt = new clsBBT(ticks);

            return(bbt.Beats);
        }
Exemple #17
0
 protected override void RoundUp(clsBBT bbt)
 {
     bbt.RoundUpToBeat();
 }
Exemple #18
0
 protected override void RoundDown(clsBBT bbt)
 {
     bbt.RoundDownToBeat();
 }
Exemple #19
0
 protected abstract void NextSeg(clsBBT bbt);
Exemple #20
0
 protected override void RoundUp(clsBBT bbt)
 {
     bbt.RoundUpToHalfBar();
 }
Exemple #21
0
 protected abstract void RoundDown(clsBBT bbt);
Exemple #22
0
 protected abstract void RoundUp(clsBBT bbt);
Exemple #23
0
        internal int BeatsToTicks(int beats)
        {
            clsBBT bbt = new clsBBT(beats, true);

            return(bbt.Ticks);
        }