NAudio.Dmo 3.4.0-preview.1

NAudio.Dmo

Nuget

DirectX Media Object (DMO) and DirectSound support for NAudio. Targets net9.0 and is Windows-only at runtime (guarded by [SupportedOSPlatform("windows")]), so it can be referenced from a plain netX.0 project as well as a netX.0-windows one.

What's included

  • DMO effects (obsolete as of 3.2; use the managed effects in NAudio.Effects) — DmoEffectWaveProvider<TEffector, TParam> with built-in wrappers for the Windows audio effect DMOs (echo, chorus, compressor, distortion, flanger, gargle, I3DL2 reverb, param EQ, waves reverb)
  • DMO MP3 decoder — DmoMp3FrameDecompressor (IMp3FrameDecompressor implementation backed by the Windows Media MP3 Decoder DMO)
  • DMO resampler stream (obsolete as of 3.2; use MediaFoundationResampler or WdlResamplingSampleProvider) — ResamplerDmoStream (wraps the wmcodecdsp resampler as a WaveStream)
  • DMO enumeration — DmoEnumerator for discovering installed audio DMOs
  • DirectSound playback — DirectSoundOut, the legacy DirectSound output path

When to use it

DMO and DirectSound are legacy Windows audio APIs. Reach for them when targeting older code paths that already rely on DirectSoundOut or the DMO MP3 decoder. For effects, NAudio.Effects (in NAudio.Core) now provides managed, cross-platform equivalents. For new code, prefer MediaFoundationResampler (in NAudio.Wasapi) over ResamplerDmoStream, and WasapiPlayerBuilder over DirectSoundOut.

This package was carved out of NAudio.Wasapi for NAudio 3 so consumers who only want WASAPI / MediaFoundation don't transitively pull DMO and DirectSound interop.

See the NAudio documentation site for tutorials and the full API reference, or the GitHub repository for full documentation and tutorials.

License

MIT.

Showing the top 20 packages that depend on NAudio.Dmo.

Packages Downloads
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.
20
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.
19
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.
18
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.
17
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.
15
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.
14
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 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.
12
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.
6

  • 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 (#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 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)

.NET 9.0

Version Downloads Last updated
3.4.0-preview.1 6 10/24/2026
3.3.0 6 10/20/2026
3.3.0-preview.1 6 10/18/2026
3.2.0 9 10/18/2026
3.2.0-preview.1 13 10/13/2026
3.1.1-preview.2 17 09/23/2026
3.1.1-preview.1 14 09/11/2026
3.1.0 11 09/07/2026
3.1.0-preview.2 13 09/08/2026
3.1.0-preview.1 12 09/10/2026
3.0.2-preview.2 13 09/01/2026
3.0.2-preview.1 12 08/21/2026
3.0.1 12 08/20/2026
3.0.1-preview.1 15 08/20/2026
3.0.0 15 08/16/2026
3.0.0-preview.20 20 08/08/2026
3.0.0-preview.19 15 07/31/2026
3.0.0-preview.18 15 07/22/2026
3.0.0-preview.17 18 07/22/2026
3.0.0-preview.16 18 07/04/2026
3.0.0-preview.15 19 07/04/2026
3.0.0-preview.14 17 06/26/2026
3.0.0-preview.10 21 06/10/2026
3.0.0-preview.9 21 05/30/2026
3.0.0-preview.8 22 05/30/2026
3.0.0-preview.7 25 05/30/2026
3.0.0-preview.6 25 05/30/2026