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(); }
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); }