Beispiel #1
0
        public TSampleAccum Update(AudioBufferStereo buffer, TSampleAccum input, bool reset, Func <IFrameClock, TState> create, Func <TState, StereoSample, TSampleAccum, int, Tuple <TState, StereoSample, TSampleAccum> > update)
        {
            if (reset || State == null)
            {
                State = create(SampleClock);
            }

            var iterationCount = buffer.Size;
            var timeIncrement  = 1.0 / buffer.SampleRate;
            //SampleClock.SetFrameTime(buffer.StartTime);
            var accum = input;

            for (int i = 0; i < iterationCount; i++)
            {
                var result = update(State, buffer.GetStereoSample(i), accum, i);
                State = result.Item1;
                buffer.SetStereoSample(i, result.Item2);
                accum = result.Item3;
                SampleClock.IncrementTime(timeIncrement);
            }

            return(input);
        }