NAudio.WinMM 3.0.0-preview.5
NAudio.WinMM
Windows Multimedia (WinMM / winmm.dll) bindings for NAudio. Windows-only (net9.0-windows).
What's included
- Playback —
WaveOutfor playing audio via the legacy WinMM API. The window-callback variant lives in NAudio.WinForms asWaveOutWindow - Recording —
WaveInfor capturing audio from input devices. The window-callback variant isWaveInWindowinNAudio.WinForms - MIDI I/O —
MidiIn/MidiOutfor sending and receiving live MIDI messages - ACM — Audio Compression Manager wrappers:
AcmStream,AcmMp3FrameDecompressor, driver enumeration - Device enumeration and capability queries for WinMM audio and MIDI devices
When to use it
Use this package when you need the classic WaveOut/WaveIn APIs — useful for broad compatibility with older Windows versions, for very simple playback/capture, or when you specifically want ACM codecs. For lower-latency playback, system loopback capture, or modern device enumeration prefer NAudio.Wasapi.
See the NAudio GitHub repository for full documentation and tutorials.
License
MIT.
Showing the top 20 packages that depend on NAudio.WinMM.
| 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.WinForms
Package Description
|
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.WinForms
Windows Forms audio controls and window-callback variants of WaveOut/WaveIn for the NAudio audio library.
|
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.WinForms
Windows Forms audio controls and window-callback variants of WaveOut/WaveIn for the NAudio audio library.
|
10 |
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.Core (>= 3.0.0-preview.5)
- NAudio.Midi (>= 3.0.0-preview.5)
| Version | Downloads | Last updated |
|---|---|---|
| 3.0.0-preview.14 | 0 | 06/25/2026 |
| 3.0.0-preview.10 | 4 | 06/10/2026 |
| 3.0.0-preview.9 | 13 | 05/30/2026 |
| 3.0.0-preview.8 | 9 | 05/30/2026 |
| 3.0.0-preview.7 | 7 | 05/30/2026 |
| 3.0.0-preview.6 | 8 | 05/30/2026 |
| 3.0.0-preview.5 | 10 | 05/30/2026 |
| 3.0.0-preview.4 | 10 | 05/30/2026 |
| 3.0.0-preview.3 | 11 | 05/30/2026 |
| 3.0.0-preview.2 | 7 | 05/30/2026 |
| 2.3.0 | 11 | 05/30/2026 |
| 2.2.1 | 9 | 05/30/2026 |
| 2.2.0 | 8 | 05/30/2026 |
| 2.1.0 | 8 | 05/30/2026 |
| 2.1.0-beta.1 | 9 | 05/30/2026 |
| 2.0.1 | 8 | 05/30/2026 |
| 2.0.0 | 8 | 05/30/2026 |
| 2.0.0-beta2 | 12 | 05/29/2026 |
| 2.0.0-beta1 | 8 | 05/30/2026 |