NAudio 3.1.0
Prefix Reserveddotnet add package NAudio --version 3.1.0
NuGet\Install-Package NAudio -Version 3.1.0
<PackageReference Include="NAudio" Version="3.1.0" />
<PackageVersion Include="NAudio" Version="3.1.0" />
<PackageReference Include="NAudio" />
paket add NAudio --version 3.1.0
#r "nuget: NAudio, 3.1.0"
#:package NAudio@3.1.0
#addin nuget:?package=NAudio&version=3.1.0
#tool nuget:?package=NAudio&version=3.1.0
NAudio
NAudio is an open source .NET audio library written by Mark Heath and contributors.
This is the main NAudio meta-package. Installing it pulls in everything you need to play, record and manipulate audio on .NET, and adds AudioFileReader — the one-line "just open this audio file" reader that picks the right decoder for you — along with Mp3FileReader.
Requires net9.0 or later. If you need .NET Framework or .NET Standard 2.0, use NAudio 2.x.
What it pulls in
Always, on every target framework:
- NAudio.Core — the format-independent core:
WaveStream,IWaveProvider/ISampleProvider, WAV and AIFF readers and writers, mixing, resampling, DSP, and theNAudio.Effectsframework - NAudio.Midi — the MIDI event model and Standard MIDI File reading and writing
Additionally, on a Windows target framework:
- NAudio.Wasapi — WASAPI playback, capture and loopback (
WasapiPlayer/WasapiRecorder), plus Media Foundation codecs - NAudio.WinMM —
WaveOut/WaveIn, classic MIDI I/O, ACM codecs and mixer controls viawinmm.dll - NAudio.Asio — low-latency multichannel playback and capture through ASIO drivers
- NAudio.Dmo — DMO effects, the DMO MP3 decoder and resampler, and
DirectSoundOut - NAudio.WinForms — Windows Forms controls, and the window-callback
WaveOutWindow/WaveInWindow
On a non-Windows target framework only the cross-platform pieces are referenced. If you only need a subset, reference the individual packages directly rather than this meta-package.
Optional packages
These are not pulled in by the meta-package — add them explicitly if you want them:
| Package | Platform | What it gives you |
|---|---|---|
| NAudio.Sampler | cross-platform | Polyphonic software sampler — SoundFont (.sf2), SFZ and single-sample instruments |
| NAudio.SoundFile | cross-platform | Read and write WAV/AIFF/FLAC/Ogg-Vorbis/Opus/MP3 via libsndfile |
| NAudio.Alsa | Linux | AlsaOut / AlsaIn playback and capture via libasound |
| NAudio.Vst3 | Windows | VST 3 plug-in hosting (preview) — effects and instruments |
| NAudio.Extras | cross-platform (+ Windows extras) | Opinionated helpers — playback engine, capture mixing, ID3 tags |
Getting started
using NAudio.Wave;
using var audioFile = new AudioFileReader("myfile.mp3");
using var player = new WasapiPlayerBuilder().Build();
player.Init(audioFile);
player.Play();
while (player.PlaybackState == PlaybackState.Playing)
{
Thread.Sleep(500);
}
- Documentation site — tutorials and the full API reference
- GitHub repository — source, issues, and the demo applications (
NAudioDemo,NAudioWpfDemo) - Migrating from NAudio 2 to NAudio 3 — every breaking change, with before/after code
License
MIT. See the project site for source, issues, and contribution guidelines.
| 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. net9.0-windows7.0 is compatible. net9.0-windows10.0.19041 is compatible. 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.0)
- NAudio.Midi (>= 3.1.0)
-
net9.0-windows10.0.19041
- NAudio.Asio (>= 3.1.0)
- NAudio.Core (>= 3.1.0)
- NAudio.Dmo (>= 3.1.0)
- NAudio.Midi (>= 3.1.0)
- NAudio.Wasapi (>= 3.1.0)
- NAudio.WinForms (>= 3.1.0)
- NAudio.WinMM (>= 3.1.0)
-
net9.0-windows7.0
- NAudio.Asio (>= 3.1.0)
- NAudio.Core (>= 3.1.0)
- NAudio.Dmo (>= 3.1.0)
- NAudio.Midi (>= 3.1.0)
- NAudio.Wasapi (>= 3.1.0)
- NAudio.WinForms (>= 3.1.0)
- NAudio.WinMM (>= 3.1.0)
NuGet packages (268)
Showing the top 5 NuGet packages that depend on NAudio:
| Package | Downloads |
|---|---|
|
SIL.Media
SIL.Media contains Windows Forms UI elements and classes for processing audio on Windows and Linux. |
|
|
AlphaTab.Windows
alphaTab is a cross platform music notation and guitar tablature rendering library. |
|
|
MilestoneSystems.VideoOS.Platform.SDK
Milestone Integration Platform Software Development Kit for standalone application development |
|
|
MicroServices
Micro Services Essential Pack |
|
|
JTigerNova.Web.Lib.Service.Broadcast
Broadcast library of web service functions |
GitHub repositories (234)
Showing the top 20 popular GitHub repositories that depend on NAudio:
| Repository | Stars |
|---|---|
|
microsoft/semantic-kernel
Integrate cutting-edge LLM technology quickly and easily into your apps
|
|
|
rocksdanister/lively
Free and open-source software that allows users to set animated desktop wallpapers and screensavers powered by WinUI 3.
|
|
|
MathewSachin/Captura
Capture Screen, Audio, Cursor, Mouse Clicks and Keystrokes
|
|
|
STranslate/STranslate
A ready-to-go translation ocr tool developed with WPF/WPF 开发的一款即用即走的翻译、OCR工具
|
|
|
microsoft/ailab
Experience, Learn and Code the latest breakthrough innovations with Microsoft AI
|
|
|
LorisYounger/VPet
虚拟桌宠模拟器 一个开源的桌宠软件, 可以内置到任何WPF应用程序
|
|
|
ScottPlot/ScottPlot
Interactive plotting library for .NET
|
|
|
Azure/azure-sdk-for-net
This repository is for active development of the Azure SDK for .NET. For consumers of the SDK we recommend visiting our public developer docs at https://learn.microsoft.com/dotnet/azure/ or our versioned developer docs at https://azure.github.io/azure-sdk-for-net.
|
|
|
immense/Remotely
A remote control and remote scripting solution, built with .NET 8, Blazor, and SignalR.
|
|
|
unchihugo/FluentFlyout
The modern Flyout app for Windows 11, built with Fluent 2 Design principles. Media Flyouts, Taskbar Widgets and more.
|
|
|
openutau/OpenUtau
Open singing synthesis platform / Open source UTAU successor
|
|
|
PCL-Community/PCL-CE
PCL 社区版 由社区开发者维护与管理
|
|
|
jitwxs/163MusicLyrics
云音乐歌词获取处理工具【网易云、QQ音乐】
|
|
|
ModernFlyouts-Community/ModernFlyouts
A modern Fluent Design replacement for the old Metro themed flyouts present in Windows.
|
|
|
SciSharp/LLamaSharp
A C#/.NET library to run LLM (🦙LLaMA/LLaVA) on your local device efficiently.
|
|
|
Azure-Samples/cognitive-services-speech-sdk
Sample code for the Microsoft Cognitive Services Speech SDK
|
|
|
Belphemur/SoundSwitch
C# application to switch default playing device. Download: https://soundswitch.aaflalo.me/
|
|
|
morkt/GARbro
Visual Novels resource browser
|
|
|
SciSharp/BotSharp
AI Multi-Agent Framework in .NET
|
|
|
open-rpa/openrpa
Free Open Source Enterprise Grade RPA
|
| Version | Downloads | Last Updated |
|---|---|---|
| 3.1.0 | 1,012 | 9/7/2026 |
| 3.1.0-preview.2 | 81 | 9/5/2026 |
| 3.1.0-preview.1 | 71 | 9/4/2026 |
| 3.0.2-preview.2 | 196 | 8/27/2026 |
| 3.0.2-preview.1 | 276 | 8/20/2026 |
| 3.0.1 | 44,594 | 8/18/2026 |
| 3.0.1-preview.1 | 103 | 8/17/2026 |
| 3.0.0 | 7,881 | 8/15/2026 |
| 3.0.0-preview.20 | 656 | 8/8/2026 |
| 3.0.0-preview.19 | 562 | 7/25/2026 |
| 3.0.0-preview.18 | 1,216 | 7/16/2026 |
| 3.0.0-preview.17 | 205 | 7/11/2026 |
| 3.0.0-preview.16 | 583 | 7/1/2026 |
| 3.0.0-preview.15 | 232 | 6/28/2026 |
| 3.0.0-preview.14 | 204 | 6/25/2026 |
| 3.0.0-preview.10 | 499 | 6/8/2026 |
| 3.0.0-preview.9 | 795 | 5/27/2026 |
| 3.0.0-preview.8 | 244 | 5/22/2026 |
| 3.0.0-preview.7 | 107 | 5/21/2026 |
| 2.4.0 | 2,654 | 8/26/2026 |
A correctness release, with Native AOT as the theme. NAudio's remaining
`[StructLayout]` interop types — `WAVEHDR`, `ACMSTREAMHEADER` and `WaveFormat`
itself — were passed to native code by value, which CoreCLR pins in place but
the AOT marshaller copies into a per-call temporary. Anything the driver or
codec wrote back was silently discarded, so `WaveIn`/`WaveOut`, ACM conversion
(and with it `Mp3FileReader` and `AudioFileReader`) and every WASAPI, Media
Foundation and DMO format negotiation were broken in an AOT-published app while
building and running cleanly. Those paths now marshal by hand into stable
unmanaged blocks, and `NAudio.WinMM` joins the AOT-compatible package set.
The two breaking changes below both fall out of that work. Also fixed are two
3.0.0 regressions — `Mp3FileReaderBase` seeking on files with a Xing/Info
header, and `WdlResamplingSampleProvider` losing samples when its source
under-feeds — and a pair of infinite loops in the WAV parser on corrupt files.
* **Breaking:** `WaveFormat` and its subclasses no longer carry `[StructLayout]`, so `Marshal.SizeOf` and `Marshal.PtrToStructure` on them now throw `ArgumentException` instead of silently returning wrong data under Native AOT (`Marshal.SizeOf<WaveFormatExtensible>()` returned 22 rather than 40, and a decoded format kept its constructor defaults). NAudio itself stopped marshalling these types in 3.1.0; use `ToWaveFormatExBytes`, `MarshalToPtr` or `MarshalFromPtr` to cross a native boundary (#1432)
* **Breaking:** `AudioClient.IsFormatSupported` and `WasapiPlayer.IsFormatSupported` now return the closest-match format as `out WaveFormat` rather than `out WaveFormatExtensible`. WASAPI documents this format as either a `WAVEFORMATEX` or a `WAVEFORMATEXTENSIBLE`, and the old signature could only represent the latter — a plain format was previously decoded as a `WaveFormatExtensible` whose base fields were valid but whose extensible fields were meaningless. Callers needing the extensible fields should pattern-match (#1425)
* Fixed `WaveIn`/`WaveOut` failing under Native AOT with `WaveHeaderUnprepared` ("The wave header was not prepared"). The `WAVEHDR` was a `[StructLayout]` class passed to winmm by value, which CoreCLR pins in place but NativeAOT copies into a per-call temporary, so the driver's `WHDR_PREPARED`/`WHDR_DONE`/`dwBytesRecorded` writes were discarded. It is now a struct in a stable unmanaged block (#1425)
* Fixed ACM conversion failing under Native AOT — `WaveFormatConversionStream`, `AcmStream` and so `Mp3FileReader` and `AudioFileReader`. `ACMSTREAMHEADER` was a `[StructLayout]` class passed to msacm32 by value, and the codec keeps private state in the header's reserved fields between `acmStreamPrepareHeader`, `acmStreamConvert` and `acmStreamUnprepareHeader`; the AOT marshaller's per-call copy round-trips only the declared fields, so that state was lost and conversion failed. It is now a struct in a stable unmanaged block, as `WAVEHDR` already is (#1425)
* Fixed `WaveFormat.MarshalToPtr` and `WaveFormat.MarshalFromPtr` corrupting any `WaveFormat` subclass under Native AOT — the AOT marshaller drops the inherited `WAVEFORMATEX` fields of a class hierarchy, so a `WaveFormatExtensible` was written with its SubFormat GUID over the sample rate. Every remaining site that sized or wrote a `WaveFormat` with `Marshal.SizeOf`/`StructureToPtr` was converted too: WASAPI (`AudioClient`), Media Foundation (`MFInitMediaTypeFromWaveFormatEx`, reachable from `MediaFoundationResampler`/`MediaFoundationEncoder`), DMO (`DmoMediaType.SetWaveFormat`, `MediaObject`) and ACM (`AcmStream`, `AcmDriver`) (#1425)
* `WaveFormat.MarshalToPtr` now always allocates at least the `18 + cbSize` bytes it advertises. A `WaveFormat` subclass that declares `extraSize` but doesn't write it in `Serialize` previously produced a block shorter than its own `cbSize`, which a native consumer would read past (#1425)
* Added `WaveFormat.ToWaveFormatExBytes()`, which renders a `WaveFormat` as a native WAVEFORMATEX byte array. `MarshalToPtr` is now a thin wrapper over it, for callers who need an unmanaged block rather than a buffer they already own (#1425)
* Added a `Serialize` override to `Mp3WaveFormat`, which previously advertised `cbSize` = 12 but wrote none of its 12 MPEGLAYER3WAVEFORMAT extra bytes (#1425)
* `WaveFormatExtraData` now sizes its buffer from `cbSize` instead of holding a fixed 100-byte array, so a fmt chunk declaring more than 100 bytes of extra data keeps it rather than having all of it discarded (#482). The fixed size existed only because `[MarshalAs(ByValArray, SizeConst = 100)]` needed a compile-time length. `ExtraData` is now exactly `ExtraSize` bytes long rather than always 100 (#1432)
* `NAudio.WinMM` is now marked `IsAotCompatible`, and the AOT smoke test covers the winmm WAVEHDR/WAVEFORMATEX paths (#1425)
* Fixed `Mp3FileReaderBase` seeking silently restarting playback from the beginning of the file on MP3s with a Xing/Info header — the lazy frame index was gated on `IsLengthExact`, which such a header sets without any frame having been scanned. Also fixed seeks landing on the wrong frame when the target fell exactly on a frame boundary, and Xing/Info header frames being indexed as audio (shifting every seek in those files ~26 ms early). A 3.0.0 regression (#1419)
* 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)
* Fixed two infinite loops in the WAV parser triggered by corrupt files declaring a negative chunk size. An RF64 `ds64` chunk with a negative `dataChunkLength`, or a `LIST/adtl` sub-chunk with a negative size, made the chunk walk advance by zero bytes per iteration and spin at 100% CPU without throwing. Negative and oversized sizes are now rejected where they are read, and an undersized `ds64` chunk throws `FormatException` rather than `ArgumentOutOfRangeException` (#1428)
* Fixed the `NAudioConsoleTest` WASAPI exclusive-mode quick scan reporting no supported formats at all on devices that support plenty — it built its probe formats with an empty `WAVEFORMATEXTENSIBLE` channel mask, which drivers such as Realtek reject outright. It now probes with the canonical layout for the channel count, the same mask the library's own format adaptation uses (#1431)