/// <summary> /// Reads decoded audio data from the current stream. /// </summary> /// <param name="buffer">The buffer to write the data to.</param> /// <param name="offset">The offset into <paramref name="buffer"/> to start writing data.</param> /// <param name="count">The number of values to write. This must be a multiple of <see cref="WaveFormat.Channels"/>.</param> /// <returns>The number of values writte to <paramref name="buffer"/>.</returns> public int Read(float[] buffer, int offset, int count) { if (_streamDecoder.IsEndOfStream) { if (_hasEnded) { // we've ended and don't have any data, so just bail return(0); } var eosea = new EndOfStreamEventArgs(); EndOfStream?.Invoke(this, eosea); _hasEnded = true; if (eosea.AdvanceToNextStream) { var formatChanged = GetNextDecoder(eosea.KeepStream); if (formatChanged ?? true) { return(0); } } } return(_streamDecoder.Read(buffer, offset, count)); }