NAudio.WinForms
3.0.0-preview.4
See the version list below for details.
dotnet add package NAudio.WinForms --version 3.0.0-preview.4
NuGet\Install-Package NAudio.WinForms -Version 3.0.0-preview.4
<PackageReference Include="NAudio.WinForms" Version="3.0.0-preview.4" />
<PackageVersion Include="NAudio.WinForms" Version="3.0.0-preview.4" />
<PackageReference Include="NAudio.WinForms" />
paket add NAudio.WinForms --version 3.0.0-preview.4
#r "nuget: NAudio.WinForms, 3.0.0-preview.4"
#:package NAudio.WinForms@3.0.0-preview.4
#addin nuget:?package=NAudio.WinForms&version=3.0.0-preview.4&prerelease
#tool nuget:?package=NAudio.WinForms&version=3.0.0-preview.4&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
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 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.0.0-preview.4)
NuGet packages (8)
Showing the top 5 NuGet packages that depend on NAudio.WinForms:
| Package | Downloads |
|---|---|
|
NAudio
NAudio, an audio library for .NET |
|
|
MicroServices
Micro Services Essential Pack |
|
|
InceptionMicroServices
Micro Services Essential Pack |
|
|
NetExtender.NAudio.Windows
NAudio Windows module of NetExtender Framework |
|
|
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. |
GitHub repositories (31)
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.
|
|
|
octgn/OCTGN
Online Card and Tabletop Gaming Network
|
|
|
rampaa/JL
JL is a program for looking up Japanese words and expressions.
|
|
|
mhwlng/streamdeck-elite
Elgato Stream Deck plugin for Elite Dangerous
|
|
|
mir-ethernity/mir-eternal
|
|
|
RoosterDragon/Desktop-Ponies
Desktop Ponies in .NET [The Original!]
|
|
|
stuff-by-3-random-dudes/UWUVCI-AIO-WPF
|
|
|
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.0.0-preview.5 | 97 | 5/11/2026 |
| 3.0.0-preview.4 | 53 | 5/11/2026 |
| 3.0.0-preview.3 | 54 | 5/11/2026 |
| 3.0.0-preview.2 | 67 | 5/10/2026 |
| 2.3.0 | 70,825 | 3/12/2026 |
| 2.2.1 | 1,611,338 | 9/4/2023 |
| 2.2.0 | 23,580 | 8/22/2023 |
| 2.1.0 | 676,309 | 5/14/2022 |
| 2.1.0-beta.1 | 1,283 | 4/30/2022 |
| 2.0.1 | 553,754 | 6/17/2021 |
| 2.0.0 | 203,521 | 2/6/2021 |
| 2.0.0-beta2 | 1,629 | 1/9/2021 |
| 2.0.0-beta1 | 2,383 | 12/12/2020 |
<!--
Bullets land here as PRs merge. The maintainer renames this section to
"### 3.0.0 (date)" at release time. See CLAUDE.md and
Docs/Architecture/ReleaseStrategy.md for the release-notes process.
-->
#### Breaking changes
* `IWaveProvider.Read` signature changed from `Read(byte[], int, int)` to `Read(Span<byte>)`. Existing callers with `byte[]` migrate via `source.Read(buffer.AsSpan(offset, count))`; implementations override `Read(Span<byte>)`
* `ISampleProvider.Read` signature changed from `Read(float[], int, int)` to `Read(Span<float>)` (same migration pattern)
* `MidiIn`, `MidiOut`, `MidiInCapabilities`, and `MidiOutCapabilities` moved from `NAudio.Midi` to `NAudio.WinMM` — all `winmm.dll` interop now lives in one assembly
* `MmResult`, `MmException`, and `Manufacturers` moved from `NAudio.Core` to `NAudio.WinMM`
* `DirectSoundOut` moved from `NAudio.Core` to `NAudio.Wasapi` (DirectSound has always been Windows-only)
* `NAudio.Midi` is now cross-platform — its `net9.0` target no longer P/Invokes `winmm.dll`
* `WasapiOut`, `WasapiCapture`, and `WasapiLoopbackCapture` are now `[Obsolete]` in favour of the new `WasapiPlayer` / `WasapiRecorder` APIs (the legacy types still ship and continue to work)
* `WaveOut` and `WaveIn` now default to event-driven callbacks; the legacy window-based variants are renamed `WaveOutWindow` / `WaveInWindow` and live in `NAudio.WinForms`
* `WaveInEventArgs` now fires one event per WASAPI packet (previously batched). A new `BufferSpan` property exposes the data without copying through the existing `Buffer` byte array
* Several `Mf*` Media Foundation wrapper types are now `internal` — only `MfActivate` and `MediaType` remain public
* `BufferedWaveProvider` buffer duration is now set in the constructor (default 5 seconds); `BufferLength` and `BufferDuration` are read-only
* `WaveBuffer` is deprecated — use `MemoryMarshal.Cast` instead
* `MMDevice.AudioClient` is `[Obsolete]` because it created a new instance per access; use `MMDevice.CreateAudioClient()`
* `PropertyStore[int]` now resolves `PropVariant` values safely; the indexer that returned the raw `PropVariant` is `[Obsolete]`
* Minimum target framework is now `net9.0` (previously supported legacy .NET Framework and .NET Standard 2.0)
* `CueWaveFileReader` removed - use `new WaveFileReader(...).Chunks.ReadCueList()` to get a `CueList`
#### New features
* **WASAPI:** new high-level `WasapiPlayer` and `WasapiRecorder` classes, built via `WasapiPlayerBuilder` / `WasapiRecorderBuilder`. Adds `IAudioClient3` low-latency support, MMCSS thread priority, `IAsyncDisposable`, zero-copy buffer access, and process-specific loopback via `WasapiRecorderBuilder.WithProcessLoopback()`
* **ASIO:** new `AsioDevice` class replacing `AsioOut` as the primary ASIO interface. Adds explicit `InitPlayback` / `InitRecording` / `InitDuplex` modes, non-contiguous channel selection, per-channel `Span<float>` callbacks, `Reinitialize()` for driver-reset recovery, and per-buffer timing fields (`SamplePosition`, `SystemTimeNanoseconds`, `Speed`, SMPTE `TimeCode`)
* **ASIO events:** `LatenciesChanged` and `ResyncOccurred` surfaced separately; buffer-size changes routed through `DriverResetRequest`
* **Media Foundation:** `MediaFoundationEncoder.EncodeToFlac` for lossless FLAC output. The FLAC/ALAC selector now falls back correctly on rate + channels
* **WinForms:** `WaveOutWindow` and `WaveInWindow` available as window-callback variants of the modernised event-driven `WaveOut` / `WaveIn`
* **DSP:** new `FftProcessor` with real-input specialisation and precomputed windowing
* **WAV chunks:** new `IWaveChunkInterpreter<T>` extension point, with built-in interpreters for cue lists, BWF `bext` (v1 and v2), and LIST/INFO metadata. RF64 promotion is now an explicit `WaveFileWriterOption`
* **`Span<T>` overloads:** added on `BiQuadFilter.Transform`, `ALawDecoder.Decode`, `MuLawDecoder.Decode`, and `IMp3FrameDecompressor.DecompressFrame` (default interface method preserves backward compatibility with `NLayer` and other third-party decoders)
* **WPF demos:** spectrum analyser rewritten with corrected dB formula (20·log₁₀), log-frequency mapping, real-input full-scale calibration, bars instead of polylines, peak-decay markers, and per-band smoothing. New `LiveWaveformControl` with configurable render styles, vertical scaling, and fill-between rendering
* **WAV recording demo:** added loopback support and a multi-API device combo with provenance embedding
#### Performance
* Vectorised mix-add and volume kernels via `System.Numerics.Tensors` — significantly faster on AVX2 hardware for typical buffer sizes
* Eliminated per-`Read` allocations in `SmbPitchShiftingSampleProvider`
* `WaveStream.Read(Span<byte>)` overridden directly on every concrete reader (no intermediate byte-array copy)
* `WasapiCapture` capture path is now zero-copy via the native WASAPI buffer span
* `BiQuadFilter` state and coefficient fields hoisted to locals in batch loops for register retention
* `Mp3FileReader` now builds its table-of-contents lazily on first seek instead of eagerly during construction; the `Position` setter no longer blocks; rapid scrub seeks debounce and silence output
#### Reliability and bug fixes
* `AcmInterop`: serialised all `msacm32` P/Invokes process-wide via a reentrant lock — fixes process-killing access violations under concurrent ACM access
* `AcmStream`: fixed double-close in finalizer by zeroing the handle field before close
* `MediaFoundationReader`: informational source-reader flags (`STREAMTICK`, `NEWSTREAM`, `NativeMediaTypeChanged`, `AllEffectsRemoved`) are now non-fatal instead of aborting reads
* `MediaFoundationReader.Reposition`: fixed using a stale field instead of the parameter (seeks would default to stream start)
* `MediaFoundationEncoder`: unselected `MediaType` instances are now disposed to prevent finalizer-thread COM ref leaks
* `Mp3FileReader`: fixed false sample-rate-change errors near end of file
* MP3 frame parsing: more robust against false frame detections from album art and trailing metadata
* `MidiFile`: preserved running-status across meta events (fixes "Read too far" errors when meta events interrupt running-status sequences)
* `WaveStream.CurrentTime` setter: now lands on a block boundary, preventing garbage audio on seek in custom readers
* `IconExtractor.Extract`: now guards against null icon handles from `ExtractIconEx`
* `DirectSoundOut.InitializeDirectSound`: wrapped notification setup in try/finally to prevent COM ref leak on `SetNotificationPositions` failure
* ASIO: implemented missing `Asio64Bit` conversions (Int24LSB and Float32LSB output sample types)
* ASIO: fixed byte-order bug in `AsioDriver.GetSamplePosition` for `Asio64Bit` reassembly
* `WdlResampler`: backported three upstream Cockos WDL bug fixes (latency calculation, `ResampleOut` clamping, Blackman-Harris window correction)
* `MediaBufferLease`: hardened against out-of-order disposal
* Added finalizers to DMO `MediaBuffer` and the `Mf*` wrappers that hold (RCW, IntPtr) pairs to prevent COM ref leaks
* Clarified `BiQuadFilter` `q` parameter docs (#1264)
#### Modernisation (Native AOT, source-generated COM)
* `NAudio.Core`, `NAudio.Midi`, and `NAudio.Wasapi` are now `IsAotCompatible=true`. AOT compatibility is exercised end-to-end by `NAudioAotSmokeTest` in CI
* Most COM interop migrated from `[ComImport]` to `[GeneratedComInterface]` / `ComWrappers`. Affected interfaces include the WASAPI / Core Audio activation chain (`IActivateAudioInterfaceCompletionHandler`, `IMMNotificationClient`, `IAudioSessionNotification`, `IAudioSessionEvents`, `IAudioEndpointVolumeCallback`, `IAgileObject`, `IPropertyStore`), the Media Foundation cascade, the DMO interfaces, DirectSound, and the `ComStream` CCW (now source-generated `IStream`)
* DirectSound P/Invokes migrated to `[LibraryImport]` with `[UnmanagedCallersOnly]` thunks; `BufferDescription` and `BufferCaps` converted from class to struct
* `AcmDriver` ported from legacy `NativeMethods` to `NativeLibrary`
* Most `MediaFoundationInterop` blittable P/Invokes migrated to `[LibraryImport]`
#### Packaging and dependencies
* Each NAudio package now ships its own README in the NuGet payload
* Replaced vendored NSpeex (deprecated) with Opus (Concentus) in the network chat demo; added round-trip unit tests
* Test project migrated from VSTest to `Microsoft.Testing.Platform`
* Migrated to the modern `.slnx` solution format
* Renamed `license.txt` to `LICENSE` for GitHub license detection; refreshed copyright year to 2008–2026