public Timesig getTimesigAt(int clock)
        {
            Timesig ret = new Timesig();

            ret.numerator   = 4;
            ret.denominator = 4;
            int index = 0;
            int c     = Count;

            for (int i = c - 1; i >= 0; i--)
            {
                index = i;
                if (this[i].Clock <= clock)
                {
                    break;
                }
            }
            ret.numerator   = this[index].Numerator;
            ret.denominator = this[index].Denominator;
            return(ret);
        }
        public Timesig getTimesigAt(int clock, ByRef <int> bar_count)
        {
            int index = 0;
            int c     = Count;

            for (int i = c - 1; i >= 0; i--)
            {
                index = i;
                if (this[i].Clock <= clock)
                {
                    break;
                }
            }
            TimeSigTableEntry item = this[index];
            Timesig           ret  = new Timesig();

            ret.numerator   = item.Numerator;
            ret.denominator = item.Denominator;
            int diff          = clock - item.Clock;
            int clock_per_bar = 480 * 4 / ret.denominator * ret.numerator;

            bar_count.value = item.BarCount + diff / clock_per_bar;
            return(ret);
        }