示例#1
0
        public int Write(TimeLocatedBufferFFT source, int frames)
        {
            var written = _buffer.Write(source.Data, 0, frames * FrameSize);

            if (written % FrameSize != 0)
            {
                throw new InvalidOperationException();
            }
            Time = Time.Increment(written * 2, Samplerate);
            return(written / FrameSize);
        }
示例#2
0
        public int Read(TimeLocatedBufferFFT target, int frames)
        {
            var timeBegin = TimeAtReadPosition;
            var read      = _buffer.Read(target.Data, 0, frames * FrameSize);

            if (read % FrameSize != 0)
            {
                throw new InvalidOperationException("shouldn't dequeue amount which is not a multiple of the frame size");
            }
            target.SetWritten(read / FrameSize, timeBegin.Increment(read * FrameSize, Samplerate));
            return(read / FrameSize);
        }
示例#3
0
        public void PrepareProcessing(int queueSizeFrames, int transferBufferSizeFrames)
        {
            if (Samplerate <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(Samplerate));
            }
            if (queueSizeFrames < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(queueSizeFrames), "must be >= 0");
            }
            if (transferBufferSizeFrames < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(transferBufferSizeFrames), "must be >= 0");
            }

            _queue          = new RingBufferFFT(queueSizeFrames, FFTSize, Samplerate);
            _transferBuffer = new TimeLocatedBufferFFT(transferBufferSizeFrames, FFTSize, Samplerate);
        }
示例#4
0
 public void PrepareProcessing(int queueFFTs, int bufferFFTs)
 {
     _queue      = new RingBufferFFT(queueFFTs, FFTSize, Samplerate);
     _readBuffer = new TimeLocatedBufferFFT(bufferFFTs, FFTSize, Samplerate);
     _stamp      = TimeStamp.Zero;
 }