/// <summary> /// Creates Real-Time FFT analyzer. /// </summary> /// <param name="source">Specified audio provider.</param> /// <param name="bufferSize">Fft input/ output buffer size should be bigger than input data, possibly equal to fftlength</param> /// <param name="fftLength">Length of FFT.</param> /// <param name="real">True if input is real</param> public FastLiveFftAnalyzer(IFloatProvider source, int bufferSize = 1000000, int fftLength = 16384, bool real = true) { if (!IsPowerOfTwo(fftLength)) { throw new ArgumentException("FFT Length must be a power of two"); } _source = source; _source.FloatChunkRecieved += FloatChunkRecieved; WaveFormat = new WaveFormat(_source.SamplingRate(), _source.Bits(), _source.ChannelCount()); FftLength = fftLength; _in = new float[bufferSize]; //DEFAULT: max buffer is 1M Real/ 512k Complex sample _out = new float[bufferSize]; //DEFAULT: max buffer is 1M Real/ 512k Complex sample _handleIn = GCHandle.Alloc(_in, GCHandleType.Pinned); _handleOut = GCHandle.Alloc(_out, GCHandleType.Pinned); _args.Update(_out, fftLength * 2); _handlePlan = real ? fftwf.dft_r2c_1d(fftLength, _handleIn.AddrOfPinnedObject(), _handleOut.AddrOfPinnedObject(), fftw_flags.Patient) : fftwf.dft_1d(fftLength, _handleIn.AddrOfPinnedObject(), _handleOut.AddrOfPinnedObject(), fftw_direction.Forward, fftw_flags.Patient); }
/// <summary> /// <para> /// Creates a <see cref="Builder" /> with <paramref name="configurement" />. /// </para> /// </summary> /// <param name="configurement"> /// The configuration for the <see cref="Builder" />. /// </param> public Builder(Configurement configurement) { _doubleProvider = configurement.DoubleProvider; _intProvider = configurement.IntProvider; _longProvider = configurement.LongProvider; _nameProvider = configurement.NameProvider; _dateTimeProvider = configurement.DateTimeProvider; _emailProvider = configurement.MailProvider; _elementProvider = configurement.ListElementPicker; _boolProvider = configurement.BoolProvider; _userNameProvider = configurement.UserNameProvider; _guidProvider = configurement.GuidProvider; _timeSpanProvider = configurement.TimeSpanProvider; _decimalProvider = configurement.DecimalProvider; _dateTimeOffsetProvider = configurement.DateTimeOffSetProvider; _floatProvider = configurement.FloatProvider; _charProvider = configurement.CharProvider; }