NAudio.WinForms
3.4.0-preview.1
Prefix Reserved
dotnet add package NAudio.WinForms --version 3.4.0-preview.1
NuGet\Install-Package NAudio.WinForms -Version 3.4.0-preview.1
<PackageReference Include="NAudio.WinForms" Version="3.4.0-preview.1" />
<PackageVersion Include="NAudio.WinForms" Version="3.4.0-preview.1" />
<PackageReference Include="NAudio.WinForms" />
paket add NAudio.WinForms --version 3.4.0-preview.1
#r "nuget: NAudio.WinForms, 3.4.0-preview.1"
#:package NAudio.WinForms@3.4.0-preview.1
#addin nuget:?package=NAudio.WinForms&version=3.4.0-preview.1&prerelease
#tool nuget:?package=NAudio.WinForms&version=3.4.0-preview.1&prerelease
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 (obsolete as of 3.2; use aRichTextBox)
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.4.0-preview.1)
NuGet packages (7)
Showing the top 5 NuGet packages that depend on NAudio.WinForms:
| Package | Downloads |
|---|---|
|
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 |
|
|
CloudVoiceToText.NetCore
对接腾讯云的语音转文字的.NetCore版本 |
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
|
|
|
stuff-by-3-random-dudes/UWUVCI-AIO-WPF
|
|
|
mir-ethernity/mir-eternal
|
|
|
mhwlng/streamdeck-starcitizen
Elgato Stream Deck button plugin for Star Citizen
|
|
|
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.
|
|
|
FredTungsten/ScriptPlayer
ScriptPlayer is a video player that controls the Handy and lots of other toys in sync with videos.
|
|
|
kuma4649/MDPlayer
|
|
|
MarshmallowAndroid/UmamusumeExplorer
Utility for viewing certain assets from ウマ娘 プリティーダービー (Umamusume: Pretty Derby).
|
|
|
protyposis/Aurio
Audio Fingerprinting & Retrieval for .NET
|
|
|
tgraupmann/WinForm_Ollama_Copilot
Ollama AI front-end using Windows Forms as a Copilot Application
|
| Version | Downloads | Last Updated |
|---|---|---|
| 3.4.0-preview.1 | 56 | 10/24/2026 |
| 3.3.0 | 463 | 10/19/2026 |
| 3.3.0-preview.1 | 83 | 10/17/2026 |
| 3.2.0 | 4,224 | 10/15/2026 |
| 3.2.0-preview.1 | 94 | 10/13/2026 |
| 3.1.1-preview.2 | 283 | 9/21/2026 |
| 3.1.1-preview.1 | 485 | 9/8/2026 |
| 3.1.0 | 47,090 | 9/7/2026 |
| 3.1.0-preview.2 | 119 | 9/5/2026 |
| 3.1.0-preview.1 | 102 | 9/4/2026 |
| 3.0.2-preview.2 | 160 | 8/27/2026 |
| 3.0.2-preview.1 | 175 | 8/20/2026 |
| 3.0.1 | 36,592 | 8/18/2026 |
| 3.0.1-preview.1 | 132 | 8/17/2026 |
| 3.0.0 | 2,501 | 8/15/2026 |
| 3.0.0-preview.20 | 534 | 8/8/2026 |
| 3.0.0-preview.19 | 556 | 7/25/2026 |
| 3.0.0-preview.18 | 397 | 7/16/2026 |
| 3.0.0-preview.17 | 150 | 7/11/2026 |
| 2.4.0 | 21,172 | 8/26/2026 |
* Hardened file parsers against malformed input: SoundFont files with chunk sizes past the end of the file, or out-of-range/out-of-order preset, instrument, bag, generator or sample indices now throw `InvalidDataException` instead of attempting multi-GB allocations or throwing `IndexOutOfRangeException`/`OverflowException`/`ArgumentException`; WAV cue chunks with a corrupt cue-point count no longer over-allocate or throw; an MP3 whose first frame is too small for the Xing/Info fields it flags is treated as having no Xing header instead of throwing from the `Mp3FileReader` constructor (#1502)
* `SoundFontSampler` skips SoundFont regions with a zero (or out-of-range) sample rate instead of throwing on every note-on (#1502)
* `MidiFile` now pairs note offs with note ons in constant time, so files with many held notes no longer load in quadratic time (#1502)
* `WaveInBuffer`, `WaveOutBuffer` and `MidiIn` no longer free buffers the driver still owns when unprepare reports they are still in use, and `MidiIn` bounds sysex reads by the buffer length; `Vst3Module` loads plug-in binaries by full path (#1502)
* **Breaking:** SFZ `#include` and `sample=` paths that are absolute or UNC/network paths (e.g. `\\server\share\x.wav`, which on Windows can leak credentials) are now refused; relative paths, including `..\Samples\...`, still work. `FileSfzIncludeResolver` and `FileSfzSampleLoader` gain a `rootDirectory` constructor argument to sandbox untrusted SFZ files to a directory, and the shared rules are exposed as `SfzFilePath.Resolve`. `SfzParser` now limits `#include` count and `#define`/`#include` expansion size, and include files are capped at 16 MB (#1501)
* Fixed native buffer overruns and use-after-free bugs: `WasapiOut` could copy past the WASAPI render buffer if an `IWaveProvider` over-reported its read count; DMO `MediaBuffer.Length` accepted values larger than the buffer; `MediaObject.GetInputType`/`GetOutputType`/`GetOutputCurrentType` returned media types pointing at freed memory (`GetWaveFormat()` on them now throws `InvalidOperationException`); `Vst3Plugin` overflowed its native buffers for a huge `maxBlockSize`; macOS `CoreAudioPlayer` could write past the HAL buffer list when the device's stream count shrank; `MediaFoundationReader` could `PropVariantClear` uninitialised memory for media without a duration (#1501)
* **macOS wrappers (preview)**: Fixed Extended Audio File Services reader/writer settings contract to be more accurate after the nullable change landed in #1486. New APIs in the `AudioFileLibraryInformation` class were also added. (#1500)
* **Breaking:** `WaveFormat.FromFormatChunk` (and so `WaveFileReader.WaveFormat`, `AudioFileReader` and anything else reading a WAV fmt chunk) now returns the most specific format type instead of always returning a `WaveFormatExtraData` — a `WaveFormatExtensible`, `AdpcmWaveFormat`, `Gsm610WaveFormat` or `Mp3WaveFormat` where the encoding and extra data allow, a plain `WaveFormat` where there is no extra data, and a `WaveFormatExtraData` only for an encoding with no dedicated subclass. This is the same choice `WaveFormat.MarshalFromPtr` makes, so a format read from a file and the same format read from a native pointer now come back as the same type. Code casting a reader's `WaveFormat` to `WaveFormatExtraData`, or unpacking a `SubFormat` GUID out of its `ExtraData`, should pattern-match on `WaveFormatExtensible` (or call `AsStandardWaveFormat()`) instead (#1497)
* `WaveFormat.MarshalFromPtr` now decodes a WAVE_FORMAT_MPEGLAYER3 block into an `Mp3WaveFormat` rather than a `WaveFormatExtraData` when its cbSize accounts for the 12 MPEGLAYER3WAVEFORMAT bytes (#1497)
* A `WaveFormat` subclass decoded from a format block now reports the `ExtraSize` its `Serialize` actually writes, so a block whose cbSize over-reported the extension (drivers pad it, and a fmt chunk can be padded too) no longer round-trips into a fmt chunk shorter than the cbSize it advertises (#1497)
* Added `BufferedWaveProvider.CompleteAdding()` and `IsAddingCompleted`, so a producer can end the stream: `Read` drains the buffer, returns one unpadded short read even with `ReadFully`, then 0. Added `UnderrunSilenceBytes`, `DiscardedBytes` and `ResetCounters()` to show silence inserted on underrun and audio dropped on overflow (#1492)
* Added `MixingSampleProvider.CompleteAdding()` and `IsAddingCompleted`, so a `ReadFully` mixer ends once its current inputs have ended; `AddMixerInput` after it throws `InvalidOperationException` (#1492)
* **`WdlResamplingSampleProvider` now defaults to sinc resampling** - a new `WdlResamplerQuality` constructor argument selects the algorithm, and the default is now `Sinc64` (64-tap windowed sinc) instead of linear interpolation with IIR filtering, which lost about 2 dB at 10 kHz and 20 dB at 18 kHz and let aliasing through. This is a behaviour change: output samples differ, CPU use is a little higher and about 0.8 ms of latency is added. Pass `WdlResamplerQuality.Linear` to keep the old output exactly. See [Resampling](Docs/Resampling.md) (#1491)
* Added `WdlResamplingSampleProvider.HoldBackOnShortReads` for sources that return short reads mid-stream (e.g. `BufferedWaveProvider` with `ReadFully` off): in sinc mode it holds back the last few output samples of a short read until their input arrives, instead of computing them from silence. `WdlResampler.ResampleOut` gains a matching overload with a `flush` argument (#1491)
* `NAudio.Asio` is now Native AOT compatible. The driver binding no longer uses reflection or runtime marshalling: the IASIO vtable is bound with typed function pointers, and channel info, clock sources and callbacks go through blittable structs. The public API is unchanged. A new test drives the binding against an in-process fake driver, and CI runs it as a Native AOT executable. Also fixed `AsioDriver.DisposeBuffers` freeing its callback table twice when called again, e.g. by `ReleaseDriver` after a failed `AsioDevice.Reinitialize` (#1487)
* **New package: NAudio.Nam** - native C# inference for [Neural Amp Modeler](https://www.neuralampmodeler.com/) captures. Loads A2 (A2-Lite and A2-Full), A1 WaveNet and LSTM `.nam` models and runs them as an allocation-free `NamEffect` (zero latency at the model's sample rate, with built-in sinc resampling at other rates), or through `NamProcessor` for ASIO callbacks. Output matches NeuralAmpModelerCore to within float rounding. See `Docs/NeuralAmpModeler.md` (#1498)
* Added `CabinetEffect`, a zero-latency guitar/bass cabinet simulator: it loads an impulse response from a WAV file at any sample rate, resamples it to the stream rate, and optionally trims its silent tail and normalises its level (#1498)
* Added a zero-latency mode to `PartitionedConvolver` (new constructor overload) and `ConvolutionReverbEffect` (`ZeroLatency`), which applies the first partition of the impulse response directly so there is no partition delay (#1498)
* `PartitionedConvolver` (and so `ConvolutionReverbEffect`) is about 2-3x faster: the frequency-domain multiply-accumulate is now vectorised (#1498)
* Fixed `WdlResampler` (and so `WdlResamplingSampleProvider`) allocating a new input buffer on most calls when the block size varied; the buffer now only grows, so steady-state resampling is allocation-free in both output-driven and input-driven mode (#1498)