NAudio.SoundFile 3.0.2-preview.1

Prefix Reserved
This is a prerelease version of NAudio.SoundFile.
dotnet add package NAudio.SoundFile --version 3.0.2-preview.1
                    
NuGet\Install-Package NAudio.SoundFile -Version 3.0.2-preview.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="NAudio.SoundFile" Version="3.0.2-preview.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="NAudio.SoundFile" Version="3.0.2-preview.1" />
                    
Directory.Packages.props
<PackageReference Include="NAudio.SoundFile" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add NAudio.SoundFile --version 3.0.2-preview.1
                    
#r "nuget: NAudio.SoundFile, 3.0.2-preview.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package NAudio.SoundFile@3.0.2-preview.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=NAudio.SoundFile&version=3.0.2-preview.1&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=NAudio.SoundFile&version=3.0.2-preview.1&prerelease
                    
Install as a Cake Tool

NAudio.SoundFile

Nuget

Cross-platform audio file reading and writing for NAudio, backed by libsndfile.

Type Role
SoundFileReader WaveStream + ISampleProvider — decode WAV/AIFF/FLAC/Ogg/Opus/MP3
SoundFileWriter Stream sink — encode WAV/AIFF/FLAC/Ogg-Vorbis/Opus/MP3
SoundFileCapabilities query which codecs the installed libsndfile supports
SoundFileException thrown on libsndfile errors (exposes ErrorCode)

This is the first cross-platform FLAC/Vorbis/Opus encoder in NAudio, and on Linux/macOS the first general-purpose decoder (there is no Media Foundation off Windows).

Platform

Truly cross-platform — net9.0, no [SupportedOSPlatform]. It P/Invokes a system libsndfile, resolved automatically per OS (libsndfile.so.1 / libsndfile.1.dylib / sndfile.dll / libsndfile-1.dll). You must provide it:

sudo apt install libsndfile1     # Debian/Ubuntu
brew install libsndfile          # macOS
vcpkg install libsndfile         # Windows (or the official binaries)

Not pulled in by the NAudio meta-package — reference it explicitly:

dotnet add package NAudio.SoundFile

Supported formats

Format Read Write Requires
WAV, AIFF, AU, CAF, W64, RAW always
FLAC libsndfile built with libFLAC (typical)
Ogg/Vorbis libvorbis (typical)
Ogg/Opus libsndfile ≥ 1.0.29 + libopus
MP3 libsndfile ≥ 1.1.0

Codec availability depends on how libsndfile was built — query it:

foreach (var f in SoundFileCapabilities.GetSupportedMajorFormats())
    Console.WriteLine(f);
bool canFlac = SoundFileCapabilities.IsFormatSupported(SoundFileMajorFormat.Flac);

AAC / M4A / ALAC / WMA are out of scope (the MPEG-4 family is FFmpeg territory).

Read any file

SoundFileReader decodes to 32-bit float, so it is both a WaveStream and an ISampleProvider:

using NAudio.SoundFile;
using NAudio.Wave;

using var reader = new SoundFileReader("song.flac");
Console.WriteLine($"{reader.WaveFormat} {reader.TotalTime}");
// feed it into any NAudio output, mixer or sample pipeline

Write FLAC / Ogg / Opus

using (var source = new SoundFileReader("in.wav"))
    SoundFileWriter.CreateSoundFile("out.flac", source,
        SoundFileMajorFormat.Flac,
        new SoundFileWriterOptions { CompressionLevel = 0.8 });

// Ogg Vorbis at VBR quality 0.6, with tags
using (var source = new SoundFileReader("in.wav"))
    SoundFileWriter.CreateSoundFile("out.ogg", source,
        SoundFileMajorFormat.OggVorbis,
        new SoundFileWriterOptions
        {
            VbrQuality = 0.6,
            Tags = new SoundFileTags { Title = "Demo", Artist = "NAudio" }
        });

Read embedded metadata back:

using var reader = new SoundFileReader("song.flac");
Console.WriteLine($"{reader.Tags.Artist} – {reader.Tags.Title}");
Console.WriteLine(SoundFileCapabilities.LibraryVersion);

The output format is also inferred from the extension:

SoundFileWriter.CreateSoundFile("out.flac", source); // → FLAC

Streams

Both ends work over a System.IO.Stream (via libsndfile virtual I/O):

using var ms = new MemoryStream();
SoundFileWriter.WriteSoundFileToStream(ms, source, SoundFileMajorFormat.OggVorbis, null);
ms.Position = 0;
using var reader = new SoundFileReader(ms);   // stream not disposed by the reader

FLAC/Ogg/Opus/MP3 stream fine to a forward-only target; WAV/AIFF back-patch their header at close and require a seekable stream (the writer throws early if you pair a non-seekable stream with such a format).

Notes

  • The writer accepts 16-bit PCM or 32-bit IEEE float input — the two container types NAudio pipelines naturally produce. Convert other formats with SampleToWaveProvider16 or .ToSampleProvider() first.
  • AOT-compatible: source-generated [LibraryImport], SafeHandle lifetime, and [UnmanagedCallersOnly] virtual-I/O callbacks.
  • The wrapper is MIT; libsndfile itself is LGPL-2.1+ and supplied by the user as a system library (no binary is shipped) — the same model as NAudio.Alsa.

Tutorial

For a worked walkthrough (reading, encoding, format conversion, streams, tags, capability detection) see Cross-platform audio file reading and writing with NAudio.SoundFile.

Documentation

See the NAudio documentation site for tutorials and the full API reference, or the GitHub repository for source, issues and demos.

License

MIT.

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on NAudio.SoundFile:

Package Downloads
NAudio.Sampler

A cross-platform software sampler for NAudio that plays MIDI through SoundFont (.sf2) and SFZ instruments, or a single sample mapped across the keyboard. Polyphonic voice engine with DAHDSR envelopes, LFOs, modulated filters, the SF2 modulator engine and reverb/chorus sends, exposed as an ISampleProvider.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
3.0.2-preview.1 30 8/20/2026
3.0.1 104 8/18/2026
3.0.1-preview.1 55 8/17/2026
3.0.0 132 8/15/2026
3.0.0-preview.20 90 8/8/2026
3.0.0-preview.19 72 7/25/2026
3.0.0-preview.18 279 7/16/2026
3.0.0-preview.17 76 7/11/2026
3.0.0-preview.16 100 7/1/2026
3.0.0-preview.15 71 6/28/2026
3.0.0-preview.14 77 6/25/2026
3.0.0-preview.10 87 6/8/2026
3.0.0-preview.9 70 5/27/2026
3.0.0-preview.8 74 5/22/2026
3.0.0-preview.7 71 5/21/2026
3.0.0-preview.6 72 5/21/2026

* Fixed `WdlResamplingSampleProvider` losing samples, and eventually returning 0 permanently, when asked for more output than the source could supply — a 3.0.0 regression that broke the common pattern of reading generously from a `BufferedWaveProvider`-backed capture chain. `WdlResampler.ResampleOut` also no longer drifts in input-driven (feed) mode when handed fewer samples than `ResamplePrepare` requested (#1412)