NAudio.WinForms
3.1.0
Prefix Reserved
See the version list below for details.
dotnet add package NAudio.WinForms --version 3.1.0
NuGet\Install-Package NAudio.WinForms -Version 3.1.0
<PackageReference Include="NAudio.WinForms" Version="3.1.0" />
<PackageVersion Include="NAudio.WinForms" Version="3.1.0" />
<PackageReference Include="NAudio.WinForms" />
paket add NAudio.WinForms --version 3.1.0
#r "nuget: NAudio.WinForms, 3.1.0"
#:package NAudio.WinForms@3.1.0
#addin nuget:?package=NAudio.WinForms&version=3.1.0
#tool nuget:?package=NAudio.WinForms&version=3.1.0
NAudio.WinForms
Windows Forms controls for NAudio. Windows-only (net9.0-windows, UseWindowsForms=true).
What's included
A handful of reusable GUI controls useful when building audio apps with WinForms:
Fader— vertical channel faderVolumeSlider— horizontal volume sliderPanSlider— pan controlPot— rotary knobWaveViewer— render aWaveStreamas a waveformProgressLog— progress/log text control
When to use it
Install this package only if you are building a Windows Forms application and want ready-made audio controls. For WPF apps, use the NAudioWpfDemo project in the NAudio source tree as a reference and roll your own controls — there is no NAudio.Wpf package.
See the NAudio documentation site for tutorials and the full API reference, or the GitHub repository for full documentation and demos.
License
MIT.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0-windows7.0 is compatible. net10.0-windows was computed. |
-
net9.0-windows7.0
- NAudio.WinMM (>= 3.1.0)
NuGet packages (8)
Showing the top 5 NuGet packages that depend on NAudio.WinForms:
| Package | Downloads |
|---|---|
|
NAudio
NAudio is an open source .NET audio library — playback and recording, file readers and writers, MIDI, DSP and effects, with platform-specific backends auto-selected by target framework. |
|
|
MicroServices
Micro Services Essential Pack |
|
|
InceptionMicroServices
Micro Services Essential Pack |
|
|
Oakrey.Audio
A Windows .NET library built on NAudio for audio recording, playback, synthesis, and signal analysis. Includes STFT/FFT pipelines, segmented SNR and log-likelihood-ratio audio comparators, signal generators, and reactive recording via IObservable. |
|
|
NetExtender.NAudio.Windows
NAudio Windows module of NetExtender Framework |
GitHub repositories (33)
Showing the top 20 popular GitHub repositories that depend on NAudio.WinForms:
| Repository | Stars |
|---|---|
|
Azure-Samples/cognitive-services-speech-sdk
Sample code for the Microsoft Cognitive Services Speech SDK
|
|
|
moom825/xeno-rat
Xeno-RAT is an open-source remote access tool (RAT) developed in C#, providing a comprehensive set of features for remote system management. Has features such as HVNC, live microphone, reverse proxy, and much much more!
|
|
|
CXWorld/CapFrameX
Frametime capture and analysis tool
|
|
|
mukunku/ParquetViewer
Simple Windows desktop application for viewing & querying Apache Parquet files
|
|
|
lastbattle/Harepacker-resurrected
All in one .wz file/map editor for MapleStory game files
|
|
|
akon47/ScreenRecorder
⏺️ A simple recording program with the ability to record screens and audio on your computer.
|
|
|
malaybaku/VMagicMirror
VRM Software for Windows to move avatar with minimal devices.
|
|
|
Kinovea/Kinovea
Video solution for sport analysis. Capture, inspect, compare, annotate and measure technical performances.
|
|
|
rampaa/JL
JL is a program for looking up Japanese words and expressions.
|
|
|
octgn/OCTGN
Online Card and Tabletop Gaming Network
|
|
|
mhwlng/streamdeck-elite
Elgato Stream Deck plugin for Elite Dangerous
|
|
|
RoosterDragon/Desktop-Ponies
Desktop Ponies in .NET [The Original!]
|
|
|
stuff-by-3-random-dudes/UWUVCI-AIO-WPF
|
|
|
mir-ethernity/mir-eternal
|
|
|
mhwlng/streamdeck-starcitizen
Elgato Stream Deck button plugin for Star Citizen
|
|
|
FredTungsten/ScriptPlayer
ScriptPlayer is a video player that controls the Handy and lots of other toys in sync with videos.
|
|
|
iss4cf0ng/DuplexSpyCS
An open-source, C#-based remote administration tool (RAT), enabling complete control of a remote Windows machine, designed for legitimate remote administration and security testing of Windows systems.
|
|
|
MarshmallowAndroid/UmamusumeExplorer
Utility for viewing certain assets from ウマ娘 プリティーダービー (Umamusume: Pretty Derby).
|
|
|
kuma4649/MDPlayer
|
|
|
tgraupmann/WinForm_Ollama_Copilot
Ollama AI front-end using Windows Forms as a Copilot Application
|
| Version | Downloads | Last Updated |
|---|---|---|
| 3.1.1-preview.1 | 58 | 9/8/2026 |
| 3.1.0 | 1,454 | 9/7/2026 |
| 3.1.0-preview.2 | 77 | 9/5/2026 |
| 3.1.0-preview.1 | 66 | 9/4/2026 |
| 3.0.2-preview.2 | 130 | 8/27/2026 |
| 3.0.2-preview.1 | 147 | 8/20/2026 |
| 3.0.1 | 16,789 | 8/18/2026 |
| 3.0.1-preview.1 | 101 | 8/17/2026 |
| 3.0.0 | 1,439 | 8/15/2026 |
| 3.0.0-preview.20 | 507 | 8/8/2026 |
| 3.0.0-preview.19 | 274 | 7/25/2026 |
| 3.0.0-preview.18 | 334 | 7/16/2026 |
| 3.0.0-preview.17 | 129 | 7/11/2026 |
| 3.0.0-preview.16 | 346 | 7/1/2026 |
| 3.0.0-preview.15 | 168 | 6/28/2026 |
| 3.0.0-preview.14 | 113 | 6/25/2026 |
| 3.0.0-preview.10 | 238 | 6/8/2026 |
| 3.0.0-preview.9 | 147 | 5/27/2026 |
| 3.0.0-preview.8 | 135 | 5/22/2026 |
| 2.4.0 | 1,577 | 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)