Skip to main content

Beat Quantization

info

Beat Quantization requires ElysMusicEngine v1.2+ to be enabled in the project. Without it, handlers with bQuantizeToBeat set fire immediately (no quantization, no errors).

Overview

Handlers with bQuantizeToBeat = true defer their Play_Internal call until the next tick of the chosen beat division from ElysMusicEngine. This keeps game-feel effects rhythmically locked to the soundtrack.

Example use case: A heavy attack hit-stop + camera shake that always lands on the nearest quarter-note, making combat feel musically satisfying.

Setup

1. Enable ElysMusicEngine

In ElysImpact.uplugin, the ElysMusicEngine dependency is listed as optional and disabled by default:

{
"Name": "ElysMusicEngine",
"Enabled": false,
"Optional": true
}

Change "Enabled": true in your project’s plugin override, or enable via Edit → Plugins.

2. Configure a Handler

On any handler in a Response Asset:

PropertyDescription
bQuantizeToBeatEnable beat quantization for this handler
BeatDivisionBeat subdivision to snap to (Quarter, Eighth, Sixteenth, ThirtySecond)

The handler’s StartDelay is still applied after the beat snap — so you can use both simultaneously.

How It Works

When a handler with bQuantizeToBeat = true is played:

  1. The handler checks if UERP_MusicSubsystem is available
  2. If available: subscribes to the next tick of the chosen ERP_EBeatDivision
  3. On the beat tick: Play_Internal executes normally
  4. If unavailable (ElysMusicEngine not present): Play_Internal executes immediately

Beat Division Reference

ERP_EBeatDivisionDescription
QuarterQuarter note (1 beat)
EighthEighth note (half beat)
SixteenthSixteenth note (quarter beat)
ThirtySecondThirty-second note (eighth beat)

Practical Notes

  • Beat quantization introduces latency (up to one beat division). Use quarter notes for heavy impacts, sixteenth notes for rapid-fire effects.
  • The ElysMusicEngine integration is a soft dependency — removing the plugin does not break ElysImpact.
  • All other handlers in the same session play immediately (or after their StartDelay). Only handlers with bQuantizeToBeat = true are deferred.

See Also

ElysMusicEngine documentation — Quartz beat clock, layer system, MetaSound integration.