NAudio.WinForms 3.0.0-preview.5
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.
Showing the top 20 packages that depend on NAudio.WinForms.
| Packages | Downloads |
|---|---|
|
NAudio
NAudio, an audio library for .NET
|
15 |
|
NAudio
NAudio, an audio library for .NET
|
14 |
|
NAudio
NAudio, an audio library for .NET
|
13 |
|
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.
|
13 |
|
NAudio
NAudio, an audio library for .NET
|
11 |
|
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.
|
11 |
|
NAudio
NAudio, an audio library for .NET
|
10 |
|
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.
|
10 |
|
NAudio
NAudio, an audio library for .NET
|
9 |
|
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.
|
8 |
|
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.
|
1 |
Breaking changes
IWaveProvider.Readsignature changed fromRead(byte[], int, int)toRead(Span<byte>). Existing callers withbyte[]migrate viasource.Read(buffer.AsSpan(offset, count)); implementations overrideRead(Span<byte>)ISampleProvider.Readsignature changed fromRead(float[], int, int)toRead(Span<float>)(same migration pattern)MidiIn,MidiOut,MidiInCapabilities, andMidiOutCapabilitiesmoved fromNAudio.MiditoNAudio.WinMM— allwinmm.dllinterop now lives in one assemblyMmResult,MmException, andManufacturersmoved fromNAudio.CoretoNAudio.WinMMDirectSoundOutmoved fromNAudio.CoretoNAudio.Wasapi(DirectSound has always been Windows-only)NAudio.Midiis now cross-platform — itsnet9.0target no longer P/Invokeswinmm.dllWasapiOut,WasapiCapture, andWasapiLoopbackCaptureare now[Obsolete]in favour of the newWasapiPlayer/WasapiRecorderAPIs (the legacy types still ship and continue to work)WaveOutandWaveInnow default to event-driven callbacks; the legacy window-based variants are renamedWaveOutWindow/WaveInWindowand live inNAudio.WinFormsWaveInEventArgsnow fires one event per WASAPI packet (previously batched). A newBufferSpanproperty exposes the data without copying through the existingBufferbyte array- Several
Mf*Media Foundation wrapper types are nowinternal— onlyMfActivateandMediaTyperemain public BufferedWaveProviderbuffer duration is now set in the constructor (default 5 seconds);BufferLengthandBufferDurationare read-onlyWaveBufferis deprecated — useMemoryMarshal.CastinsteadMMDevice.AudioClientis[Obsolete]because it created a new instance per access; useMMDevice.CreateAudioClient()PropertyStore[int]now resolvesPropVariantvalues safely; the indexer that returned the rawPropVariantis[Obsolete]- Minimum target framework is now
net9.0(previously supported legacy .NET Framework and .NET Standard 2.0) CueWaveFileReaderremoved - usenew WaveFileReader(...).Chunks.ReadCueList()to get aCueList
New features
- WASAPI: new high-level
WasapiPlayerandWasapiRecorderclasses, built viaWasapiPlayerBuilder/WasapiRecorderBuilder. AddsIAudioClient3low-latency support, MMCSS thread priority,IAsyncDisposable, zero-copy buffer access, and process-specific loopback viaWasapiRecorderBuilder.WithProcessLoopback() - ASIO: new
AsioDeviceclass replacingAsioOutas the primary ASIO interface. Adds explicitInitPlayback/InitRecording/InitDuplexmodes, non-contiguous channel selection, per-channelSpan<float>callbacks,Reinitialize()for driver-reset recovery, and per-buffer timing fields (SamplePosition,SystemTimeNanoseconds,Speed, SMPTETimeCode) - ASIO events:
LatenciesChangedandResyncOccurredsurfaced separately; buffer-size changes routed throughDriverResetRequest - Media Foundation:
MediaFoundationEncoder.EncodeToFlacfor lossless FLAC output. The FLAC/ALAC selector now falls back correctly on rate + channels - WinForms:
WaveOutWindowandWaveInWindowavailable as window-callback variants of the modernised event-drivenWaveOut/WaveIn - DSP: new
FftProcessorwith real-input specialisation and precomputed windowing - WAV chunks: new
IWaveChunkInterpreter<T>extension point, with built-in interpreters for cue lists, BWFbext(v1 and v2), and LIST/INFO metadata. RF64 promotion is now an explicitWaveFileWriterOption Span<T>overloads: added onBiQuadFilter.Transform,ALawDecoder.Decode,MuLawDecoder.Decode, andIMp3FrameDecompressor.DecompressFrame(default interface method preserves backward compatibility withNLayerand 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
LiveWaveformControlwith 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-
Readallocations inSmbPitchShiftingSampleProvider WaveStream.Read(Span<byte>)overridden directly on every concrete reader (no intermediate byte-array copy)WasapiCapturecapture path is now zero-copy via the native WASAPI buffer spanBiQuadFilterstate and coefficient fields hoisted to locals in batch loops for register retentionMp3FileReadernow builds its table-of-contents lazily on first seek instead of eagerly during construction; thePositionsetter no longer blocks; rapid scrub seeks debounce and silence output
Reliability and bug fixes
AcmInterop: serialised allmsacm32P/Invokes process-wide via a reentrant lock — fixes process-killing access violations under concurrent ACM accessAcmStream: fixed double-close in finalizer by zeroing the handle field before closeMediaFoundationReader: informational source-reader flags (STREAMTICK,NEWSTREAM,NativeMediaTypeChanged,AllEffectsRemoved) are now non-fatal instead of aborting readsMediaFoundationReader.Reposition: fixed using a stale field instead of the parameter (seeks would default to stream start)MediaFoundationEncoder: unselectedMediaTypeinstances are now disposed to prevent finalizer-thread COM ref leaksMp3FileReader: 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.CurrentTimesetter: now lands on a block boundary, preventing garbage audio on seek in custom readersIconExtractor.Extract: now guards against null icon handles fromExtractIconExDirectSoundOut.InitializeDirectSound: wrapped notification setup in try/finally to prevent COM ref leak onSetNotificationPositionsfailure- ASIO: implemented missing
Asio64Bitconversions (Int24LSB and Float32LSB output sample types) - ASIO: fixed byte-order bug in
AsioDriver.GetSamplePositionforAsio64Bitreassembly WdlResampler: backported three upstream Cockos WDL bug fixes (latency calculation,ResampleOutclamping, Blackman-Harris window correction)MediaBufferLease: hardened against out-of-order disposal- Added finalizers to DMO
MediaBufferand theMf*wrappers that hold (RCW, IntPtr) pairs to prevent COM ref leaks - Clarified
BiQuadFilterqparameter docs (#1264)
Modernisation (Native AOT, source-generated COM)
NAudio.Core,NAudio.Midi, andNAudio.Wasapiare nowIsAotCompatible=true. AOT compatibility is exercised end-to-end byNAudioAotSmokeTestin 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 theComStreamCCW (now source-generatedIStream) - DirectSound P/Invokes migrated to
[LibraryImport]with[UnmanagedCallersOnly]thunks;BufferDescriptionandBufferCapsconverted from class to struct AcmDriverported from legacyNativeMethodstoNativeLibrary- Most
MediaFoundationInteropblittable 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
.slnxsolution format - Renamed
license.txttoLICENSEfor GitHub license detection; refreshed copyright year to 2008–2026
.NET 9.0
- NAudio.WinMM (>= 3.0.0-preview.5)
| Version | Downloads | Last updated |
|---|---|---|
| 3.0.0-preview.14 | 0 | 06/25/2026 |
| 3.0.0-preview.10 | 7 | 06/10/2026 |
| 3.0.0-preview.9 | 10 | 05/30/2026 |
| 3.0.0-preview.8 | 11 | 05/31/2026 |
| 3.0.0-preview.7 | 8 | 05/30/2026 |
| 3.0.0-preview.6 | 9 | 05/30/2026 |
| 3.0.0-preview.5 | 10 | 05/30/2026 |
| 3.0.0-preview.4 | 11 | 05/31/2026 |
| 3.0.0-preview.3 | 7 | 05/30/2026 |
| 3.0.0-preview.2 | 10 | 05/31/2026 |
| 2.3.0 | 8 | 05/30/2026 |
| 2.2.1 | 11 | 05/30/2026 |
| 2.2.0 | 9 | 05/30/2026 |
| 2.1.0 | 9 | 05/30/2026 |
| 2.1.0-beta.1 | 9 | 05/30/2026 |
| 2.0.1 | 8 | 05/30/2026 |
| 2.0.0 | 11 | 05/30/2026 |
| 2.0.0-beta2 | 11 | 05/30/2026 |
| 2.0.0-beta1 | 9 | 05/30/2026 |