Example #1
0
        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);
            });
        }
Example #2
0
        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);
        }