Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
 /// <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;
 }