NAudio.Core 3.0.0-preview.14
NAudio.Core
The cross-platform core of NAudio. Contains everything that is independent of the underlying audio API, so it targets plain net9.0 and can be used on Windows, Linux, and macOS.
What's included
WaveStream,IWaveProvider,ISampleProviderand associated base classesWaveFormatand format-conversion helpers- WAV, AIFF, and raw file readers and writers (
WaveFileReader,WaveFileWriter,AiffFileReader, …) - Sample providers for mixing, panning, volume, fade in/out, offset/skip/take, mono↔stereo conversion
- Resampling (
WdlResamplingSampleProvider) and pitch shifting (SmbPitchShiftingSampleProvider) - Signal generators, envelope generators, a BiQuad filter, and an FFT
- G.711 (µ-law / a-law) codecs
When to use it
Reference NAudio.Core directly when you want to read, write, or manipulate audio on non-Windows targets, or when you are assembling your own combination of platform packages (NAudio.Wasapi, NAudio.WinMM, NAudio.Asio, …) and don't want the full NAudio meta-package.
See the NAudio GitHub repository for full documentation.
License
MIT.
Showing the top 20 packages that depend on NAudio.Core.
| 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.Wasapi
WASAPI playback and capture (including loopback and process loopback) and WinRT MIDI for the NAudio audio library.
|
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.WinMM
winmm.dll-based Windows audio APIs (WaveOut, WaveIn, MidiIn, MidiOut, ACM) for the NAudio audio library.
|
13 |
|
NAudio.WinMM
Package Description
|
12 |
|
NAudio.Wasapi
Package Description
|
12 |
|
NAudio.Midi
Cross-platform MIDI file reading and writing, MIDI message types, and SMPTE timing for the NAudio audio library.
|
12 |
|
NAudio
NAudio, an audio library for .NET
|
11 |
|
NAudio.WinMM
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.Asio
Package Description
|
11 |
|
NAudio.Dmo
Package Description
|
11 |
NAudio 3 is a major release. The single NAudio assembly is now split into
focused, independently usable packages; the minimum target framework moves to
net9.0; the core is cross-platform and Native-AOT compatible; and several
large new subsystems — a cross-platform effects suite, a software sampler, VST 3
hosting, and ALSA and libsndfile backends — join the library. The headline
changes are below; see the linked tutorials and the per-package READMEs for the
detail.
Packages and platform
- Minimum target framework is now
net9.0— legacy .NET Framework and .NET Standard 2.0 support is dropped NAudiois now a set of focused packages:NAudio.Core,NAudio.Midi,NAudio.WinMM,NAudio.Wasapi,NAudio.Asio,NAudio.WinForms,NAudio.Dmo, plus the newNAudio.Effects(inNAudio.Core),NAudio.Sampler,NAudio.Vst3,NAudio.AlsaandNAudio.SoundFile. TheNAudiometa-package still pulls the Windows stack together so existing consumers see no change. SeeDocs/Architecture/NAudio3AssemblyLayoutPlan.mdNAudio.Core,NAudio.MidiandNAudio.Wasapiare Native-AOT compatible (IsAotCompatible=true), enforced in CI byNAudioAotSmokeTest.NAudio.Midi,NAudio.Effects,NAudio.SamplerandNAudio.SoundFileare cross-platform
New capabilities
Each new subsystem has its own tutorial/README; only the headline is listed here.
- Audio effects — a cross-platform
NAudio.Effectsframework:IAudioEffect/EffectSampleProvider/EffectChainwith click-free bypass, dry/wet mix and an optional parameter model, plus a broad effect set (EQ and filtering, dynamics, saturation/lo-fi, delay and modulation, reverb including FFT convolution, pitch shifting, and voice-comms AGC/noise-suppression). See Docs/AudioEffects.md - Software sampler — new
NAudio.Samplerpackage: polyphonic, cross-platform playback of SoundFont (.sf2) and SFZ instruments and single-sample instruments, rendered as anISampleProvider(SF2 modulator engine, DAHDSR envelopes, LFOs, modulated filters, reverb/chorus sends, voice stealing, choke groups). See Docs/Sampler.md - VST 3 hosting (preview) — new
NAudio.Vst3package (Windows-only): discover, load and host VST 3 effects and instruments, with parameters, state and.vstpresetpresets, native editor windows, program lists/units, latency compensation, and live/offline MIDI-file playback through the shared MIDI pipeline. See theNAudio.Vst3README andDocs/Architecture/Vst3Hosting.md. VST is a registered trademark of Steinberg Media Technologies GmbH - Cross-platform audio files — new
NAudio.SoundFilepackage: read and write WAV/AIFF/FLAC/Ogg-Vorbis/Opus/MP3 via a system libsndfile on Windows, Linux and macOS (the first cross-platform FLAC/Vorbis/Opus encoder in NAudio). See Docs/CrossPlatformAudioFilesWithSoundFile.md (#1289) - Linux audio — new
NAudio.Alsapackage:AlsaOut(IWavePlayer) andAlsaIn(IWaveIn) plusAlsaDeviceEnumerator, backed bylibasound. See Docs/PlayAudioFileLinuxAlsa.md and Docs/RecordAudioFileLinuxAlsa.md (#1182) - Sequencing — a portable
NAudio.Sequencingnamespace inNAudio.Core(tempo and time-signature maps, transport,EventTimeline, swing, and a sample-accurate per-buffer dispatcher) underpinning MIDI-file playback and the sampler. SeeDocs/Architecture/Sequencing.md - Modern WASAPI and ASIO — high-level
WasapiPlayer/WasapiRecorder(built viaWasapiPlayerBuilder/WasapiRecorderBuilder:IAudioClient3low-latency, MMCSS,IAsyncDisposable, zero-copy buffers, process-loopback capture), and a newAsioDevicereplacingAsioOut(explicit playback/recording/duplex modes, non-contiguous channels, per-channelSpan<float>callbacks, driver-reset recovery, per-buffer timing). See Docs/WasapiPlayer.md, Docs/WasapiRecorder.md and Docs/AsioMigration.md - MIDI —
NAudio.Midiis now cross-platform; new WinRTWinRTMidiIn/WinRTMidiOut(inNAudio.Wasapi) and backend-agnosticIMidiInput/IMidiOutput; a newIMidiInstrumentseam withMidiFileSequence/SequencedMidiPlayer/OfflineMidiRenderer/LiveMidiInstrumentgives an end-to-end MIDI-file → audio pipeline that drives the sampler or a hosted VST 3 instrument.MidiFilenow also reads RIFF-RMID (.rmi) files (#1236) - Sample providers / DSP — new
ChannelMixerSampleProviderwith ready-madeChannelMixMatrixroutings (mono↔stereo, stereo→5.1, …), thanks to @antiduh (#982); a newFftProcessor, anIWaveChunkInterpreter<T>extension point (cue lists, BWFbext, LIST/INFO),Span<T>overloads across the codec/DSP surface, and reusable building blocks (EnvelopeFollower,DelayLine,Lfo,Oversampler,LinkwitzRileyCrossover,PartitionedConvolver, …) underpinning the effects and sampler
Breaking changes
The full upgrade walkthrough — every breaking change with before/after code — is
in Migrating from NAudio 2 to NAudio 3. Most
apps need only re-target to net9.0 and adjust custom providers to the new
Span<T> Read signature. The highest-impact changes:
- Minimum target framework is now
net9.0(legacy .NET Framework / .NET Standard 2.0 dropped) IWaveProvider.Read/ISampleProvider.Readnow take a singleSpan<byte>/Span<float>(was buffer/offset/count) — callers migrate viasource.Read(buffer.AsSpan(offset, count)); implementations override the span methodWasapiOut,WasapiCaptureandWasapiLoopbackCaptureare[Obsolete]in favour ofWasapiPlayer/WasapiRecorder(the legacy types still ship and work);WasapiOut's embedded exclusive-mode resampler was removedWaveOut/WaveInnow default to event-driven callbacks; the window-based variants are renamedWaveOutWindow/WaveInWindowinNAudio.WinForms- Some types moved package/namespace as part of the split — classic Windows MIDI I/O and
winmmtypes toNAudio.WinMM; the DMO/DirectSound types into the newNAudio.Dmopackage; plus smaller moves (AudioVolumeLevel,CaptureState,DmoMp3FrameDecompressor). Meta-package consumers are unaffected SimpleCompressorStream,ImpulseResponseConvolutionandNAudio.Extras.Equalizerwere removed — superseded byNAudio.Effects(CompressorEffect,ConvolutionReverbEffect,Equalizer)
Notable bug fixes
In addition to the fixes below, the new sampler/SFZ/SoundFont subsystem saw extensive correctness work during development — see Docs/Sampler.md.
WaveOut: fixed a race where stopping/disposing faster than the buffer latency could throw aNullReferenceExceptionviaPlaybackStopped(#804)WaveFileWriter: removed the finalizer that fired an unconditionalDebug.Assertand could crash the process on the finalizer thread when construction had thrownAudioClient.Disposeis now idempotent and safe against concurrent/re-entrant disposal, fixing an intermittent interopNullReferenceException(#1183)AcmInterop: serialised allmsacm32P/Invokes process-wide, fixing process-killing access violations under concurrent ACM useWaveFileReader/AiffFileReader: malformed headers declaringBlockAlign=0now throwInvalidDataExceptionfrom the constructor instead ofDivideByZeroExceptionlater (#1254);WaveFileReaderno longer throws on an oversizedfmtcbSize(#482)WaveFormat.Serialize: PCM formats now write the canonical 16-bytefmtchunk (#934, #1098)WaveViewer: fixed rendering upside-down (#801, #818) and now renders any source format correctly viaToSampleProvider()(#564)AudioSessionControl: now supports multiple registered event clients without leaking, andUnRegisterEventClienthonours its argument (#1263)AudioEndpointVolume.OnVolumeNotification: fixed per-channel notifications all returning channel 0's volume (#351)CueListInterpreter: WAV files with cue points but no labels now return cues with empty labels instead of null (#549)ResamplerDmoStream: fixed an infinite loop onReadafter seeking and the loss of the resampler tail at end-of-stream (#607, #608)LoopStream.Read: no longer spins at 100% CPU when the wrapped source can't satisfy a read (#1338)Mp3FileReader: fixed false sample-rate-change errors near end of file, and more robust MP3 frame parsing against album art / trailing metadataMidiFile: preserve running-status across meta events (fixes "Read too far")BlockAlignReductionStream.Position: validates the incoming value, so a block-aligned seek after an arbitrary read no longer wrongly throws (#368)MmExceptionmessages now append a human-readableMmResultdescription (#1192);Id3v2Tag.ReadTagno longer throws/catches for tagless MP3 streams (#265)- ASIO: implemented missing
Asio64BitInt24LSB/Float32LSB conversions and fixed a byte-order bug inGetSamplePosition;WdlResamplerbackported three upstream Cockos WDL fixes - Hardened Media Foundation and DMO interop against COM ref leaks on error paths (
MediaFoundationReader,MediaFoundationEncoder,MediaFoundationTransform,MediaBuffer,Mf*wrappers) (#1293) - Removed dead
naudio.codeplex.comlinks from the README, MixDiff and source comments (#985)
Performance
- Vectorised mix-add and volume kernels via
System.Numerics.Tensors(significantly faster on AVX2) WaveStream.Read(Span<byte>)is overridden directly on every concrete reader (no intermediate byte-array copy);WasapiCapture's path is now zero-copy via the native WASAPI buffer span- Eliminated per-
Readallocations inSmbPitchShiftingSampleProvider,ResamplerDmoStreamandDmoMp3FrameDecompressor(#971) Mp3FileReaderbuilds its table-of-contents lazily on first seek; thePositionsetter no longer blocks and rapid scrub seeks debounce- The sampler and sequencer render allocation-free and lock-free on the audio thread (control-rate envelope/LFO advancement, indexed region lookup, copy-on-write event timelines)
Tooling, packaging and modernisation
- Most COM interop migrated from
[ComImport]to[GeneratedComInterface]/ComWrappers, and many P/Invokes to[LibraryImport], across the WASAPI/Core Audio activation chain, Media Foundation, the DMO interfaces, DirectSound and theComStreamCCW - Codebase-wide code-style sweep (file-scoped namespaces, target-typed
new, string interpolation, …) now enforced at build time via.editorconfig/.globalconfig; added.git-blame-ignore-revsso the mechanical commits don't obscuregit blame - Each NAudio package now ships its own README and embeds an SPDX 2.2 SBOM under
/_manifest/spdx_2.2/in its.nupkg, and carries per-package<Description>metadata - Tests migrated from VSTest to
Microsoft.Testing.Platform, andNAudioTestssplit into cross-platformNAudio.Core.Testsand Windows-onlyNAudio.Windows.Tests; migrated to the.slnxsolution format; renamedlicense.txttoLICENSE - Added a DocFX documentation site (tutorials + API reference) published to GitHub Pages, built from
Docs/and the source XML comments
Demos and test harnesses
- New WPF demo modules for the new subsystems: Convolution Reverb, managed Realtime Effects, VST3 Realtime Effects, VST3 Realtime Instrument, VST3 MIDI File Player, a Live MIDI Sampler and a Single-Sample Editor
- New
NAudioConsoleTestCLI harness (run-batchfor JSON test plans,diagnosefor a structured host-audio snapshot) andMfStressTestfor the new Media Foundation interop - WPF demos: spectrum analyser rewritten (correct dB/log-frequency/calibration), new
LiveWaveformControl, loopback + multi-API device selection in the WAV recording demo, and a drum machine rebuilt on the newNAudio.Sequencingprimitives - Replaced the deprecated vendored NSpeex with Opus (Concentus) in the network chat demo
.NET 9.0
- System.Numerics.Tensors (>= 9.0.0)
| Version | Downloads | Last updated |
|---|---|---|
| 3.0.0-preview.14 | 1 | 06/26/2026 |
| 3.0.0-preview.10 | 3 | 06/11/2026 |
| 3.0.0-preview.9 | 9 | 05/30/2026 |
| 3.0.0-preview.8 | 10 | 05/30/2026 |
| 3.0.0-preview.7 | 11 | 05/30/2026 |
| 3.0.0-preview.6 | 11 | 05/30/2026 |
| 3.0.0-preview.5 | 9 | 05/30/2026 |
| 3.0.0-preview.4 | 10 | 05/30/2026 |
| 3.0.0-preview.3 | 9 | 05/30/2026 |
| 3.0.0-preview.2 | 10 | 05/30/2026 |
| 2.3.0 | 11 | 05/30/2026 |
| 2.2.1 | 9 | 05/30/2026 |
| 2.2.0 | 9 | 05/30/2026 |
| 2.1.0 | 9 | 05/30/2026 |
| 2.1.0-beta.1 | 7 | 05/30/2026 |
| 2.0.0 | 12 | 05/30/2026 |
| 2.0.0-beta2 | 10 | 05/30/2026 |
| 2.0.0-beta1 | 10 | 05/30/2026 |