AudioSeparator.Onnx.Demucs
0.2.0-beta.2
dotnet add package AudioSeparator.Onnx.Demucs --version 0.2.0-beta.2
NuGet\Install-Package AudioSeparator.Onnx.Demucs -Version 0.2.0-beta.2
<PackageReference Include="AudioSeparator.Onnx.Demucs" Version="0.2.0-beta.2" />
<PackageVersion Include="AudioSeparator.Onnx.Demucs" Version="0.2.0-beta.2" />
<PackageReference Include="AudioSeparator.Onnx.Demucs" />
paket add AudioSeparator.Onnx.Demucs --version 0.2.0-beta.2
#r "nuget: AudioSeparator.Onnx.Demucs, 0.2.0-beta.2"
#:package AudioSeparator.Onnx.Demucs@0.2.0-beta.2
#addin nuget:?package=AudioSeparator.Onnx.Demucs&version=0.2.0-beta.2&prerelease
#tool nuget:?package=AudioSeparator.Onnx.Demucs&version=0.2.0-beta.2&prerelease
AudioSeparator.Onnx.Demucs
Demucs/htdemucs ONNX backend for AudioSeparator — separate audio into drums, bass, vocals, and other stems.
Part of AudioSeparator — modular .NET audio stem separation.
Install
dotnet add package AudioSeparator.Onnx.Demucs
dotnet add package AudioSeparator.NAudio
Or swap NAudio for FFMPEG when you need broader format support:
dotnet add package AudioSeparator.FFMPEG
When to use this package
- You want to separate audio stems using a Demucs or htdemucs ONNX model.
- This is the recommended entry point for most applications.
- Pair with NAudio (simple WAV/MP3) or FFMPEG (any format ffmpeg supports).
Core principle
The separator returns
SeparationResultwith separated stems. It does not write files. CallWriteToDirectoryAsyncafterRunAsyncto save stems to disk.
Defaults
DemucsBuilder.Create(...) pre-configures htdemucs requirements:
| Setting | Default |
|---|---|
| Sample rate | 44100 Hz |
| Stem names | drums, bass, other, vocals |
Override with .UseStemNames(...) or .WithRequirements(...) when needed.
Quick start
using AudioSeparator.NAudio;
using AudioSeparator.Onnx.Demucs;
using Microsoft.ML.OnnxRuntime;
var builder = DemucsBuilder.Create("htdemucs.onnx")
.UseNAudio()
.ConfigureSessionOptions(options =>
{
options.GraphOptimizationLevel = GraphOptimizationLevel.ORT_ENABLE_ALL;
options.AppendExecutionProvider_CUDA(0); // optional GPU
});
using var separator = builder.Build();
var session = await separator.CreateSession("input.wav");
foreach (var task in session.Tasks)
{
task.SetProgressCallback((current, total) =>
Console.WriteLine($"{task.Description}: {current}/{total}"));
}
var result = await session.RunAsync();
await result.WriteToDirectoryAsync("./Outputs");
foreach (var (name, _) in result.Stems)
{
Console.WriteLine($"Wrote stem: {name}");
}
FFMPEG output (e.g. MP3 stems)
using AudioSeparator.FFMPEG;
using AudioSeparator.Onnx.Demucs;
var builder = DemucsBuilder.Create("htdemucs.onnx")
.UseFFMPEG(options =>
{
options.OutputFormat = "mp3";
options.OutputCodec = "libmp3lame";
});
Session flow
| Step | Action | Output |
|---|---|---|
| 1 | CreateSession(path) |
Probe + validation |
| 2 | Attach progress on session.Tasks |
UI feedback |
| 3 | RunAsync() |
SeparationResult |
| 4 | WriteToDirectoryAsync(dir) |
Files on disk |
Key API
| Type | Role |
|---|---|
DemucsBuilder.Create(modelPath) |
Fluent entry point with htdemucs defaults |
DemucsBuilder |
Builder: UseStemNames, UseAudio, WithRequirements, ConfigureSessionOptions |
DemucsSeparator |
IAudioSeparator implementation |
DemucsContext |
ONNX runtime context for Demucs |
DemucsInferenceSpecReader |
Reads htdemucs tensor layout from ONNX metadata |
DemucsInferenceTask |
Chunked inference; output layout [batch, stems, channels, frames] |
Inherited from OnnxSeparatorBuilder: .UseAudio(), .UseStemNames(), .WithRequirements(), .ConfigureSessionOptions().
Requirements
- .NET 10
- ONNX model file (e.g. htdemucs) — not included in this package
- AudioSeparator.Onnx (transitive)
- CUDA (optional) — GPU inference via
ConfigureSessionOptions - ffmpeg/ffprobe (optional) — only if using FFMPEG extensions
Examples
Sample projects in the AudioSeparator repository:
Examples/AudioSeparator.Console— minimal console usageExamples/AudioSeparator.Spectre— progress bars with Spectre.ConsoleExamples/AudioSeparator.Benchmark— performance benchmarking
Related packages
| Package | NuGet | Description |
|---|---|---|
| AudioSeparator.NAudio | NAudio I/O | WAV read/write |
| AudioSeparator.FFMPEG | FFMPEG I/O | Broad format support |
| AudioSeparator.Benchmark | Benchmarking | Performance reports |
| AudioSeparator.Abstractions | Contracts | Result types and extensions |
Source: AudioSeparator.Onnx.Demucs on GitHub
License
MIT — see AudioSeparator repository.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- AudioSeparator.Onnx (>= 0.2.0-beta.2)
- Microsoft.ML.OnnxRuntime.Gpu (>= 1.28.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.2.0-beta.2 | 68 | 9/13/2026 |
| 0.2.0-beta.1 | 54 | 9/13/2026 |
| 0.2.0-beta | 79 | 8/30/2026 |
| 0.1.0-beta | 86 | 8/13/2026 |