/// <summary>
    /// Sets the Bass inputstream and initializes the playbackbuffer.
    /// </summary>
    /// <param name="stream">New inputstream.</param>
    public void SetInputStream(BassStream stream)
    {
      ResetInputStream();

      _inputStream = stream;

      UpdateVizLatencyCorrection();

      _buffer = new AudioRingBuffer(stream.SampleRate, stream.Channels, _bufferSize + _vizReadOffset);
      _streamEnded = false;
      _buffer.ResetPointers();

      CreateOutputStream();
      CreateVizStream();
      _inputStreamInitialized = true;

      // Ensure prebuffering
      _updateThreadFinished.Reset();

      StartBufferUpdateThread();
      _updateThreadFinished.WaitOne();
    }