/// <inheritdoc />
 public Jacobi.Vst.Core.VstTimeInfo GetTimeInfo(Jacobi.Vst.Core.VstTimeInfoFlags filterFlags)
 {
     vstTimeInfo.SampleRate               = 44100.0;
     vstTimeInfo.Tempo                    = (double)BPM;
     vstTimeInfo.PpqPosition              = (vstTimeInfo.SamplePosition / vstTimeInfo.SampleRate) * (vstTimeInfo.Tempo / 60.0);
     vstTimeInfo.NanoSeconds              = 0.0;
     vstTimeInfo.BarStartPosition         = 0.0;
     vstTimeInfo.CycleStartPosition       = 0.0;
     vstTimeInfo.CycleEndPosition         = 0.0;
     vstTimeInfo.TimeSignatureNumerator   = 4;
     vstTimeInfo.TimeSignatureDenominator = 4;
     vstTimeInfo.SmpteOffset              = 0;
     vstTimeInfo.SmpteFrameRate           = new Jacobi.Vst.Core.VstSmpteFrameRate();
     vstTimeInfo.SamplesToNearestClock    = 0;
     vstTimeInfo.Flags                    = VstTimeInfoFlags.TempoValid |
                                            VstTimeInfoFlags.PpqPositionValid |
                                            VstTimeInfoFlags.TransportPlaying;
     return(vstTimeInfo);
 }
Esempio n. 2
0
 /// <inheritdoc />
 public Jacobi.Vst.Core.VstTimeInfo GetTimeInfo(Jacobi.Vst.Core.VstTimeInfoFlags filterFlags)
 {
     _cmdStub.RaisePluginCalled("GetTimeInfo(" + filterFlags + ")");
     return(null);
 }
        /// <inheritdoc />
        public Jacobi.Vst.Core.VstTimeInfo GetTimeInfo(Jacobi.Vst.Core.VstTimeInfoFlags filterFlags)
        {
            RaisePluginCalled("GetTimeInfo(" + filterFlags + ")");


            // our sample calculator performs:
            // Create TimeInfo class
            VstTimeInfo vstTimeInfo = new VstTimeInfo();

            // most common settings
            vstTimeInfo.SamplePosition = Parent.SampleOffset + Parent.BufferIncrement;
            vstTimeInfo.SampleRate     = Parent.Settings.Rate;
            //
            filterFlags |= VstTimeInfoFlags.ClockValid;
            if (filterFlags.HasFlag(VstTimeInfoFlags.ClockValid))
            {
                // should we floor this?
                int cp = MasterClock.SolvePPQ(Parent.SampleOffset, Parent.Settings).ClocksAtPosition.ToInt32();

                vstTimeInfo.SamplesToNearestClock = MasterClock.SolveSamples(cp * 24, Parent.Settings).Samples32Floor;
            }
            // NanoSecondsValid
            filterFlags |= VstTimeInfoFlags.NanoSecondsValid;
            if (filterFlags.HasFlag(VstTimeInfoFlags.NanoSecondsValid))
            {
                vstTimeInfo.NanoSeconds = (Parent.SampleOffset / Parent.Settings.Rate) * billionth;
            }
            // TempoValid
            filterFlags |= VstTimeInfoFlags.TempoValid;
            if (filterFlags.HasFlag(VstTimeInfoFlags.TempoValid))
            {
                vstTimeInfo.Tempo = Parent.Settings.Tempo;
            }
            // PpqPositionValid
            filterFlags |= VstTimeInfoFlags.PpqPositionValid;
            if (filterFlags.HasFlag(VstTimeInfoFlags.PpqPositionValid))
            {
                vstTimeInfo.PpqPosition = MasterClock.SolvePPQ(vstTimeInfo.SamplePosition, Parent.Settings).Frame;
            }
            // BarStartPositionValid
            filterFlags |= VstTimeInfoFlags.BarStartPositionValid;
            if (filterFlags.HasFlag(VstTimeInfoFlags.BarStartPositionValid))
            {
                vstTimeInfo.BarStartPosition = MasterClock.SolvePPQ(vstTimeInfo.SamplePosition, Parent.Settings).Pulses; // * st.SamplesPerQuarter
            }
            // CyclePositionValid
            filterFlags |= VstTimeInfoFlags.CyclePositionValid;
            if (filterFlags.HasFlag(VstTimeInfoFlags.CyclePositionValid))
            {
                vstTimeInfo.CycleStartPosition = Parent.SampleOffset;//st.SolvePPQ(Parent.SampleOffset,Parent.Settings).Frame;
                vstTimeInfo.CycleEndPosition   = Parent.SampleOffset + Parent.CurrentSampleLength;
            }
            // TimeSignatureValid
            if (filterFlags.HasFlag(VstTimeInfoFlags.TimeSignatureValid))
            {
                vstTimeInfo.TimeSignatureNumerator   = Parent.Settings.TimeSignature.Numerator;
                vstTimeInfo.TimeSignatureDenominator = Parent.Settings.TimeSignature.Denominator;
            }
            // SmpteValid
            if (filterFlags.HasFlag(VstTimeInfoFlags.SmpteValid))
            {
                vstTimeInfo.SmpteFrameRate = smpte_rate; /* 30 fps no-drop */
                vstTimeInfo.SmpteOffset    = 0;
                /* not quite valid */
            }
            vstTimeInfo.Flags = filterFlags;
            return(vstTimeInfo);
        }