novolis-audio / getting-started.md
Getting started
SFX, voice, and live music
dotnetaudiottsminiaudionovolis
Game SFX
<PackageReference Include="Novolis.Audio" Version="2026.1.*" />Sources: nuget.org + GitHub Packages (Novolis.*).
using Novolis.Audio;
using Novolis.Audio.Runtime;
using var engine = new MiniaudioAudioEngine();
if (!engine.Start())
throw new InvalidOperationException("Audio device failed to start.");
var clip = engine.LoadSound("assets/click.wav");
engine.Play(clip);Headless / CI
using var engine = new NullAudioEngine();
engine.Start();Voice / TTS
<PackageReference Include="Novolis.Audio.Voice" Version="2026.1.*" />Optional archetypes:
<PackageReference Include="Novolis.Audio.Voice.Profiles" Version="2026.1.*" />using Novolis.Audio.Voice;
using Novolis.Audio.Voice.Profiles;
var builder = VoiceArchetypeApplicator.Apply(
new VoiceServiceBuilder(),
VoiceArchetypeCatalog.ExcitableFemale);
IVoiceService voice = builder.BuildService();
await voice.SpeakAsync("Tower, SAS one two three is ready for departure.");For ATC phraseology + radio DSP, copy the delivery pattern from novolis-dogfooding (Novolis.Dogfooding.Voice) or compose your own effect chain with Novolis.Audio.Effects.
Models
Download a Piper English model and set:
$env:NOVOLIS_VOICE_MODEL_DIR = "C:\models\vits-piper-en_US-amy-low"See voice-models.md.
DI
services.AddNovolisVoice(); // Sherpa + NAudio
services.AddNovolisAtcVoice(VoiceArchetypeCatalog.ExcitableFemale); // archetype + ATC deliveryHeadless voice tests
var voice = new VoiceServiceBuilder()
.UseNullSynthesizer()
.UseNullPlayback()
.BuildService();Maintainer setup
git clone https://github.com/Novolis-Platform/novolis-audio.git
cd novolis-audio
dotnet run --project codegen/Novolis.Audio.Pipeline -- run maintainer
dotnet build Novolis.Audio.slnx -c ReleaseNative shim: novolis_audio (miniaudio) built under codegen/native/novolis-audio-platform/. Windows novolis_audio.dll is checked in under src/Novolis.Audio.Native/runtimes/win-x64/native/ for CI.