NAudio.SoundFile
3.1.1-preview.1
Prefix Reserved
dotnet add package NAudio.SoundFile --version 3.1.1-preview.1
NuGet\Install-Package NAudio.SoundFile -Version 3.1.1-preview.1
<PackageReference Include="NAudio.SoundFile" Version="3.1.1-preview.1" />
<PackageVersion Include="NAudio.SoundFile" Version="3.1.1-preview.1" />
<PackageReference Include="NAudio.SoundFile" />
paket add NAudio.SoundFile --version 3.1.1-preview.1
#r "nuget: NAudio.SoundFile, 3.1.1-preview.1"
#:package NAudio.SoundFile@3.1.1-preview.1
#addin nuget:?package=NAudio.SoundFile&version=3.1.1-preview.1&prerelease
#tool nuget:?package=NAudio.SoundFile&version=3.1.1-preview.1&prerelease
NAudio.SoundFile
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
SampleToWaveProvider16or.ToSampleProvider()first. - AOT-compatible: source-generated
[LibraryImport],SafeHandlelifetime, 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 | Versions 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. |
-
net9.0
- NAudio.Core (>= 3.1.1-preview.1)
NuGet packages (2)
Showing the top 2 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. |
|
|
mdimai666.Mars.PlayAudioNodePlugin
Mars.PlayAudioNodePlugin - provide play audio functions for Mars - Play audio - List output devices |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on NAudio.SoundFile:
| Repository | Stars |
|---|---|
|
purelogiccode/SimpleLauncher
Simple Launcher is an open-source emulator frontend. Designed for both casual gamers and power users, it provides a seamless interface to organize, browse, and launch your retro gaming collection with deep integration for modern emulators and RetroAchievements.
|
| Version | Downloads | Last Updated |
|---|---|---|
| 3.1.1-preview.1 | 0 | 9/8/2026 |
| 3.1.0 | 99 | 9/7/2026 |
| 3.1.0-preview.2 | 55 | 9/5/2026 |
| 3.1.0-preview.1 | 41 | 9/4/2026 |
| 3.0.2-preview.2 | 70 | 8/27/2026 |
| 3.0.2-preview.1 | 64 | 8/20/2026 |
| 3.0.1 | 497 | 8/18/2026 |
| 3.0.1-preview.1 | 71 | 8/17/2026 |
| 3.0.0 | 163 | 8/15/2026 |
| 3.0.0-preview.20 | 109 | 8/8/2026 |
| 3.0.0-preview.19 | 81 | 7/25/2026 |
| 3.0.0-preview.18 | 310 | 7/16/2026 |
| 3.0.0-preview.17 | 81 | 7/11/2026 |
| 3.0.0-preview.16 | 112 | 7/1/2026 |
| 3.0.0-preview.15 | 77 | 6/28/2026 |
| 3.0.0-preview.14 | 86 | 6/25/2026 |
| 3.0.0-preview.10 | 93 | 6/8/2026 |
| 3.0.0-preview.9 | 75 | 5/27/2026 |
| 3.0.0-preview.8 | 78 | 5/22/2026 |
| 3.0.0-preview.7 | 75 | 5/21/2026 |
* **macOS support (preview)** - A new wrappers library is added wrapping macOS native API's for playback/recording, reading/writing files and resampling audio. The `NAudio.MacOS` package ships pre-release only (`X.Y.Z-preview.N`) while its API settles, so it stays pre-release alongside stable releases of the other packages. Special thanks to @mdcdi1315 (#1325) for the work and the tests. For more information, see the [design](Docs/Architecture/MacOSWrappersDesign.md) doc that describes the decisions that helped shape the wrappers. (#1398)