`vaudio.dll` is the main Raytraced Audio DLL. There are other `.dll` files in the SDK that are used to render the debug window. When shipping Vercidium Audio with your games in future, you will only need to include `vaudio.dll`. > Please note that this SDK does not handle audio playback. Instead it provides the low pass filter and reverb properties that must be applied to each sound, in your engine / audio API of choice ## Quick Start Step 1 - add `vaudio.dll` as a dependency to your C# project Step 2 - create an instance of a [[raytraced-audio/v110/Classes/RaytracingContext]]. Read more: [[raytraced-audio/v110/Creating a Raytracing Context]]. ```cs using vaudio; public class Game { RaytracingContext context; public Game() { context = new RaytracingContext() { WorldSize = new Vector3F(100), RenderingEnabled = true, }; } } ``` Step 2 - create a copy of your game's world using low-poly primitives. Read more: [[raytraced-audio/v110/Primitives]]. ```cs var prism = new PrismPrimitive() { // Every primitive must have a material material = MaterialType.Metal, // Scale must be separate from transform size = new Vector3F(15), // Rotate and position it transform = Matrix4F.CreateRotationX(MathF.PI / 4) * Matrix4F.CreateTranslation(32, 32, 32) }; context.AddPrimitive(prism); ``` Step 3 - create a listener emitter that casts occlusion rays towards a target emitter. Read more: [[raytraced-audio/v110/Emitters|Emitters]]. ```cs var listener = new Emitter() { Position = new Vector3F(4), ReverbRayCount = 128, ReverbBounceCount = 64, OcclusionRayCount = 256, OcclusionBounceCount = 8, }; context.AddEmitter(listener); var target = new Emitter() { Position = new Vector3F(8), ReverbRayCount = 32, ReverbBounceCount = 64, }; context.AddEmitter(target); // Cast occlusion rays towards the emitter listener.AddTarget(target); // This callback is invoked when listener raytraces target target.OnRaytracedByAnotherEmitter = (Emitter other) => { var filter = other.GetFilter(target); // Check low-pass filter gains var gainLF = (int)(filter.gainLF * 100); var gainHF = (int)(filter.gainHF * 100); Console.WriteLine(quot;The target has {gainLF}% LF gain"); Console.WriteLine(quot;The target has {gainHF}% HF gain"); // PSEUDOCODE - play a sound Godot.PlaySound(SoundType.Explosion,target.position, filter); }; ``` Step 4 - update the context every frame. This will perform raytracing and handle input for the debug rendering window. Read more: [[raytraced-audio/v110/Advanced/Raytracing Lifecycle]]. ```cs public void Update() { // Update the listener's position listener.Position = new Vector3F(20, 20, 20); // Perform raytracing on background threads and invoke callbacks context.Update(); } ``` Step 5 - access reverb properties. Read more: [[Reverb Overview]]. ```cs context.OnReverbUpdated = () => { // Access reverb properties var outside = context.ProcessedReverb.OutsidePercent; Console.WriteLine(quot;The listener is {(int)(outside * 100)}% outside."); // Access precalculated EAX properties var diffusion = listener.EAX.DecayTime; } ``` Step 6 - access ambient results. Read more: [[Ambience Overview]]. ```cs emitter.OnRaytracingComplete = () => { var ambientGainLF = context.AmbientFilter.GainLF; var ambientGainHF = context.AmbientFilter.GainHF; } ``` Continue reading: - [[raytraced-audio/v110/Full Code Example|Full Code Example]] - [[raytraced-audio/v110/Creating a Raytracing Context|Creating a Raytracing Context]] - [[Emitters]] - [[raytraced-audio/v110/Primitives|Primitives]] - [[Reverb Overview|Reverb]] - [[Muffling Overview|Muffling]] - [[raytraced-audio/v110/Materials|Materials]] - [[Ambience Overview|Ambience]] - [[Visualisation Overview|Visualisation]] Advanced: - [[raytraced-audio/v110/Advanced/Threading Architecture|Threading Architecture]] - [[raytraced-audio/v110/Advanced/Trail-Based Raytracing|Trail-Based Raytracing]]