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