Esempio n. 1
0
        public override void Process()
        {
            var fftsToRead       = Math.Min(_portInp.BufferCapacity / FFTSize, _portInp.Available / FFTSize);
            var outputFramesFree = _portOut.Free;

            if (outputFramesFree == 0)
            {
                return;
            }

            var inputBuffer  = _portInp.Read(Math.Min(outputFramesFree, fftsToRead) * FFTSize);
            var inputSamples = inputBuffer.Data;

            for (int i = 0; i < inputBuffer.Available; i++)
            {
                _frameBuffer[inputSampleCount++] = inputSamples[i];

                if (inputSampleCount == _fft.Size)
                {
                    _fft.UseData(_frameBuffer, 0, _fft.Size);
                    var result = _fft.Transform();
                    _portOut.WriteFrame(result, 0);
                    inputSampleCount = 0;
                }
            }
        }
Esempio n. 2
0
        public IEnumerable <double[]> Iterate(long at, long count, long step)
        {
            var buffer = new double[FftSize];

            for (var i = 0; i < count; i++)
            {
                var remaining = _cb.FillBuffer(at + i * step, FftSize, 1, buffer);

                if (remaining == FftSize)
                {
                    yield return(new double[0]);
                }
                else
                {
                    _trans.UseData(buffer, 0, buffer.Length);
                    yield return(_trans.Transform());
                }
            }
        }
Esempio n. 3
0
        protected override void DataAvailable(DataInputPort port)
        {
            while (_portInp.Queue.Length > _bufIn.Length)
            {
                var samples = _bufOut.GetSamples();
                var k       = 0;

                _portInp.Queue.Dequeue(_bufIn);

                for (int i = 0; i < _bufIn.Length; i += _fft.Size)
                {
                    _fft.UseData(_bufIn.GetSamples(), i, _fft.Size);
                    var result = _fft.Transform();

                    for (int j = 0; j < result.Length; j++)
                    {
                        samples[k++] = result[j];
                    }
                }

                _bufOut.SetWritten(k);
                _portOut.SendData(_bufOut);
            }
        }