public DiscChanger() { _trackList = new Playlist(); var audioEngine = AudioEngine.CreateDefault(); if (audioEngine == null) { throw new Exception("Failed to create an audio backend!"); } var specProcessor = new SpectrumProcessor(); _soundSink = new SoundSink(audioEngine, specProcessor); Observable.FromEventPattern <EventArgs>(this, nameof(TrackChanged)) .Select(x => _currentTrack) .Where(x => x != null) .Select(x => x.SoundStream) .Subscribe(OnTrackChanged); Observable.FromEventPattern <double[, ]>(specProcessor, nameof(specProcessor.FftDataReady)) .Subscribe(x => { CurrentSpectrumData = x.EventArgs; SpectrumDataReady?.Invoke(this, EventArgs.Empty); }); }
public DiscChanger() { _trackList = new Playlist(); var audioEngine = AudioEngine.CreateDefault(); if (audioEngine == null) { throw new Exception("Failed to create an audio backend!"); } var spectrumProcessor = new SpectrumProcessor(); _soundSink = new SoundSink(audioEngine, spectrumProcessor); _internalDisposables = new CompositeDisposable(); Observable.FromEventPattern <double[, ]>(spectrumProcessor, nameof(spectrumProcessor.FftDataReady)) .Subscribe(x => { CurrentSpectrumData = x.EventArgs; }) .DisposeWith(_internalDisposables); this.WhenAnyValue(x => x.InternalState) .DistinctUntilChanged() .Subscribe(x => IsPlaying = (x == DiscChangerState.Playing)) .DisposeWith(_internalDisposables); InternalState = (DiscChangerState.Idle); }