protected bool Initialize(IInputSource inputSource) { if (_state != SessionState.Reset) { return(false); } if (!MatchesInputSource(inputSource)) { return(false); } _currentInputSource = inputSource; Log.Debug("PlaybackSession: Creating output stream"); const BASSFlag flags = BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE; int handle = Bass.BASS_StreamCreate( _currentInputSource.OutputStream.SampleRate, _currentInputSource.OutputStream.Channels, flags, _streamWriteProcDelegate, IntPtr.Zero); if (handle == BassConstants.BassInvalidHandle) { throw new BassLibraryException("BASS_StreamCreate"); } _outputStream = BassStream.Create(handle); _state = SessionState.Initialized; _upDownMixer.SetInputStream(_outputStream); _vstProcessor.SetInputStream(_upDownMixer.OutputStream); _winAmpDSPProcessor.SetInputStream(_vstProcessor.OutputStream); _playbackBuffer.SetInputStream(_winAmpDSPProcessor.OutputStream); _controller.OutputDeviceManager.SetInputStream(_playbackBuffer.OutputStream, _outputStream.IsPassThrough); return(true); }