Пример #1
0
    public int GetSampleFromTiming(Timing timing)
    {
        Timing nextMeterTiming = new Timing();

        if (timing < nextMeterTiming)
        {
            return(0);
        }

        MusicMeterBySample meter = null;

        for (int i = 0; i < Meters.Length; ++i)
        {
            if (i + 1 < Meters.Length)
            {
                nextMeterTiming.Set(Meters[i + 1].StartBar);
                if (timing < nextMeterTiming)
                {
                    meter = Meters[i];
                    break;
                }
            }
            else             // 最後のメーター
            {
                meter = Meters[i];
                break;
            }
        }

        return(meter.GetSampleFromTiming(timing));
    }
Пример #2
0
 protected override void CalcTimingAndFraction(ref Timing just, out float fraction)
 {
     if (currentMeter_ == null)
     {
         just.Set(-1, 0, 0);
         fraction = 0;
     }
     else
     {
         MusicMeterBySample meter = currentMeter_ as MusicMeterBySample;
         just.Set(meter.GetTimingFromSample(currentSample_));
         fraction = (float)(currentSample_ - meter.GetSampleFromTiming(just)) / meter.SamplesPerUnit;
     }
 }