Table of Contents

Class SoundFileReader

Namespace
NAudio.SoundFile
Assembly
NAudio.SoundFile.dll

Reads any audio file libsndfile can decode (WAV, AIFF, FLAC, Ogg/Vorbis, Opus, MP3, …) as a repositionable WaveStream. Audio is exposed as 32-bit IEEE float, so the reader is also an ISampleProvider and feeds NAudio's float pipeline without an extra conversion stage.

public sealed class SoundFileReader : WaveStream, IAsyncDisposable, IDisposable, IWaveProvider, ISampleProvider
Inheritance
SoundFileReader
Implements
Inherited Members
Extension Methods

Remarks

Requires a system libsndfile. Which codecs are available depends on how that build was configured — see SoundFileCapabilities.

Constructors

SoundFileReader(Stream)

Opens an audio file from a stream. The stream is not disposed by the reader (the caller owns it). For non-seekable streams, formats that need random access to decode may fail.

public SoundFileReader(Stream inputStream)

Parameters

inputStream Stream

A readable stream positioned at the start of the audio file.

Exceptions

SoundFileException

The stream could not be opened or decoded.

ArgumentException

inputStream is not readable.

SoundFileReader(string)

Opens an audio file by path.

public SoundFileReader(string path)

Parameters

path string

Path to the audio file.

Exceptions

SoundFileException

The file could not be opened or decoded.

Properties

CanSeek

We can seek within this stream

public override bool CanSeek { get; }

Property Value

bool

Length

Length of the decoded audio in bytes (32-bit float samples), or 0 when the source is non-seekable and libsndfile cannot report the frame count up front (some streamed Ogg/MP3). Check CanSeek before relying on this for streamed input.

public override long Length { get; }

Property Value

long

Position

Position in the decoded float stream, in bytes. Setting requires a seekable source.

public override long Position { get; set; }

Property Value

long

Exceptions

InvalidOperationException

The source is not seekable.

Tags

Embedded string metadata (title/artist/album/…), or empty fields when the format/file carries none.

public SoundFileTags Tags { get; }

Property Value

SoundFileTags

WaveFormat

Retrieves the WaveFormat for this stream

public override WaveFormat WaveFormat { get; }

Property Value

WaveFormat

Methods

Dispose(bool)

Releases the unmanaged resources used by the Stream and optionally releases the managed resources.

protected override void Dispose(bool disposing)

Parameters

disposing bool

true to release both managed and unmanaged resources; false to release only unmanaged resources.

Read(byte[], int, int)

When overridden in a derived class, reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

public override int Read(byte[] buffer, int offset, int count)

Parameters

buffer byte[]

An array of bytes. When this method returns, the buffer contains the specified byte array with the values between offset and (offset + count - 1) replaced by the bytes read from the current source.

offset int

The zero-based byte offset in buffer at which to begin storing the data read from the current stream.

count int

The maximum number of bytes to be read from the current stream.

Returns

int

The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not currently available, or zero (0) if count is 0 or the end of the stream has been reached.

Exceptions

ArgumentException

The sum of offset and count is larger than the buffer length.

ArgumentNullException

buffer is null.

ArgumentOutOfRangeException

offset or count is negative.

IOException

An I/O error occurs.

NotSupportedException

The stream does not support reading.

ObjectDisposedException

Methods were called after the stream was closed.

Read(Span<byte>)

When overridden in a derived class, reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

public override int Read(Span<byte> buffer)

Parameters

buffer Span<byte>

A region of memory. When this method returns, the contents of this region are replaced by the bytes read from the current source.

Returns

int

The total number of bytes read into the buffer. This can be less than the size of the buffer if that many bytes are not currently available, or zero (0) if the buffer's length is zero or the end of the stream has been reached.

Read(Span<float>)

Fill the specified buffer with 32 bit floating point samples

public int Read(Span<float> buffer)

Parameters

buffer Span<float>

The buffer to fill with samples.

Returns

int

The number of samples written. Return 0 to signal end of stream.