DanceRudiments 0.2.0

dotnet add package DanceRudiments --version 0.2.0
                    
NuGet\Install-Package DanceRudiments -Version 0.2.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DanceRudiments" Version="0.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="DanceRudiments" Version="0.2.0" />
                    
Directory.Packages.props
<PackageReference Include="DanceRudiments" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add DanceRudiments --version 0.2.0
                    
#r "nuget: DanceRudiments, 0.2.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package DanceRudiments@0.2.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=DanceRudiments&version=0.2.0
                    
Install as a Cake Addin
#tool nuget:?package=DanceRudiments&version=0.2.0
                    
Install as a Cake Tool

DanceRudiments for C# / .NET

By Kieran Simkin — My Songs, part of DanceFlow.

A C# interface to the original C++ rhythmic movement library, not a managed reimplementation. Enumerate the native catalogue, sample XYZ offsets at 64 pips per beat, fill a Span<Offset3> in one native call, or own a private pattern bank.

Install

After a release containing this binding has been published:

dotnet add package DanceRudiments

The package includes the managed net8.0 assembly and native x64/ARM64 libraries for Windows, Linux and macOS. It targets .NET 8+ applications; CI executes the contract suite on .NET 8 and .NET 10. Prefer a supported .NET runtime. Native availability is not the same as support for every .NET host: .NET Framework, Unity/Mono, IL2CPP, mobile, browser-WASM and NativeAOT are not claimed as supported by this first binding. Linux packages target glibc, not musl.

using DanceRudiments;

Console.WriteLine($"C++ version: {Rudiments.NativeVersion}");
Console.WriteLine($"{Rudiments.Catalogue.Count} movements");
var amen = Rudiments.Catalogue.Single(p => p.Name == "beat_amen_four_bar_bounce");
int pip = Rudiments.PipAtTime(1.25, bpm: 140, periodPips: amen.PeriodPips);
Offset3 position = Rudiments.Sample(amen.Name, pip);
Console.WriteLine($"{position.X}, {position.Y}, {position.Z}");
Offset3[] loop = Rudiments.SampleMany(amen.Name, 0, amen.PeriodPips);

No compiler or Python runtime is needed to consume a matching released NuGet package. Its native assets are selected automatically by NuGet/.NET. For an explicit target, publish with dotnet publish -r win-x64 --self-contained false (or another included runtime identifier). A source checkout needs CMake, a C++17 compiler and the .NET SDK; see the full guide.

Custom data

using var bank = PatternLibrary.Load("my-patterns.compiled.json");
var custom = bank.Sample("my_pattern", -1);

Use the existing Python dancerudiments-compile command to author/compile JSON; loading and all movement evaluation at runtime are C++. PatternDefinition also accepts an explicit table. Samples and metadata are copied; using disposes the native bank. SafeHandle protects calls against disposal races and provides a finalizer fallback. An exact default reload is idempotent; changed defaults under the same name are rejected. No override of the global catalogue is permitted.

Timing and errors

A pip is 1/64 of a quarter note, not a millisecond or a MIDI tick. Negative pips wrap; each pattern has its own period. PipAtTime floors and wraps absolute fixed-tempo time, avoiding frame-by-frame drift. For tempo changes, integrate a musical timeline rather than multiplying all past time by the latest BPM.

Unknown names or invalid native input become ArgumentException; range failures become ArgumentOutOfRangeException. Missing or wrong-architecture native files produce the usual loader exceptions. Calling a disposed bank throws ObjectDisposedException. The API changes position only; respect reduced-motion preferences in the consuming application and keep movement within bounded subjects.

Included material

The package contains its README, full C# guide, a runnable C# example, existing visualizer screenshots, author credits, original third-party notices, and per-RID native hashes/source revisions. Symbols in .snupkg cover the managed assembly; they are not native debugging symbols.

Download the self-contained visualizer for audible beat/movement comparisons. It is separate from the .NET binding and its large HTML snapshot is deliberately not duplicated into the NuGet package.

Source and releases · Music / My Songs

An offline copy of the guide is included as docs/csharp.md inside the NuGet package.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

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 44 9/30/2026