Beispiel #1
0
        public SoundEffect(SoundEffectConfig config) : base(config)
        {
            _soundIn = new WasapiLoopbackCapture();
            _soundIn.Initialize();

            var soundInSource = new SoundInSource(_soundIn);
            var sampleSource  = soundInSource.ToSampleSource();

            const FftSize fftSize = FftSize.Fft1024;

            _fftBuffer        = new float[(int)fftSize];
            _spectrumProvider = new SpectrumProvider(sampleSource.WaveFormat.Channels, sampleSource.WaveFormat.SampleRate, fftSize);

            var notificationSource = new DataNotificationSource(sampleSource);

            notificationSource.DataRead += (s, e) => _spectrumProvider.Add(e.Data, e.Data.Length);

            var waveSource = notificationSource.ToWaveSource(16);
            var buffer     = new byte[waveSource.WaveFormat.BytesPerSecond / 2];

            soundInSource.DataAvailable += (s, e) => { while (waveSource.Read(buffer, 0, buffer.Length) > 0)
                                                       {
                                                           ;
                                                       }
            };

            _spectrum = new LedSpectrum(GenerateColor)
            {
                FftSize            = fftSize,
                SpectrumProvider   = _spectrumProvider,
                UseAverage         = Config.UseAverage,
                MinimumFrequency   = Config.MinimumFrequency,
                MaximumFrequency   = Config.MaximumFrequency,
                ScalingStrategy    = Config.ScalingStrategy,
                ScalingFactor      = Config.ScalingFactor,
                IsXLogScale        = false,
                SpectrumResolution = (int)fftSize
            };

            _spectrum.UpdateFrequencyMapping();
            _soundIn.Start();
        }
Beispiel #2
0
        private bool Initialize()
        {
            if (_initialized)
            {
                return(true);
            }

            var currentTicks = Environment.TickCount;

            if (currentTicks - _lastInitializeTickCount < 1000)
            {
                return(false);
            }
            _lastInitializeTickCount = currentTicks;

            try
            {
                _soundIn = new WasapiLoopbackCapture();
                _soundIn.Initialize();
            }
            catch (Exception e)
            {
                Logger.Debug(e, "Failed to initialize WasapiLoopbackCapture!");
                return(false);
            }

            Logger.Debug($"Initialized WasapiLoopbackCapture on \"{_soundIn.Device.FriendlyName}\"");

            var soundInSource = new SoundInSource(_soundIn);
            var sampleSource  = soundInSource.ToSampleSource();

            const FftSize fftSize = FftSize.Fft1024;

            _fftBuffer        = new float[(int)fftSize];
            _spectrumProvider = new SpectrumProvider(sampleSource.WaveFormat.Channels, sampleSource.WaveFormat.SampleRate, fftSize);

            var notificationSource = new DataNotificationSource(sampleSource);

            notificationSource.DataRead += (s, e) => _spectrumProvider.Add(e.Data, e.Data.Length);

            var waveSource = notificationSource.ToWaveSource(16);
            var buffer     = new byte[waveSource.WaveFormat.BytesPerSecond / 2];

            soundInSource.DataAvailable += (s, e) => { while (waveSource.Read(buffer, 0, buffer.Length) > 0)
                                                       {
                                                           ;
                                                       }
            };

            _spectrum = new LedSpectrum(Config.ColorGradient)
            {
                FftSize          = fftSize,
                SpectrumProvider = _spectrumProvider,
                UseAverage       = Config.UseAverage,
                MinimumFrequency = Config.MinimumFrequency,
                MaximumFrequency = Config.MaximumFrequency,
                ScalingStrategy  = Config.ScalingStrategy,
                ScalingFactor    = Config.ScalingFactor,
                IsXLogScale      = false
            };

            _soundIn.Start();

            _initialized = true;
            return(true);
        }