UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
EventQuantizer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6
7namespace Audio
8{
28
30 {
31 // The sample rate (in frames per second) of the output audio buffer
33
34 // Number of channels in the output audio buffer
36
37 // The beats per minute
39
40 // The beats per bar
42
43 // What the "global" quantization setting is
45
46 // The beat division (must be power of 2)
48
57 };
58
59 // Event listener interface. Event listeners make callbacks to objects that are interested in specific events.
60 // Can be hooked to non-audio systems to trigger BP delegates, animation triggering, etc.
61 // Note: this event listener is called from the audio render thread (or async audio rendering/generation task).
63 {
64 public:
65 // Callback for when a specific event type occurs. Listeners register themselves for specific events.
66 // But will get the same callback called. I.e. same object can register for multiple events.
67 // @param EventQuantizationType The event type that just happened
68 // @param Bars The number of bars in that this event happened
69 // @param Beat The beat within the bar that the event happened (can be fractional for sub-division events)
70 virtual void OnEvent(EEventQuantization EventQuantizationType, int32 Bars, float Beat) = 0;
71 };
72
73 // Class which handles the details of event quantization.
75 {
76 public:
79
80 // Sets the quantization settings for the event quantizer
82 const FEventQuantizationSettings& GetQuantizationSettings() const { return QuantizationSettings; }
83
84 // Allows continuous control over BPM for the event quantizer
85 SIGNALPROCESSING_API void SetBPM(const float InBPM);
86 float GetBPM() const { return QuantizationSettings.BeatsPerMinute; }
87
88 // Set the beat division
90 uint16 GetBeatDivision() const { return QuantizationSettings.BeatDivision; }
91
93
95
96 // Called to perform notifications for any events which happen in the next given number of frames.
97 // This function should be called in an audio buffer render callback.
99
100 // Enqueues a quantized event
102
103 // Register event listener for specific events
105
106 // Unregisters the event listener for all quantization events
108
109 // Unregister the event listener for specific quantization event
111
112 private:
113
114 SIGNALPROCESSING_API void SetQuantizationSettingsInternal(const FEventQuantizationSettings& QuantizationSettings);
115 SIGNALPROCESSING_API void SetBPMInternal(const float InBPM);
116 SIGNALPROCESSING_API void ResetEventState();
117
118 // Struct for defining and hold quantization timing state
119 struct FEventQuantizationState
120 {
121 // The current frame count of this quantization type
122 uint32 FrameCount;
123
124 // The frame duration of this quantization type (how many frames for the event to reoccur)
125 uint32 EventFrameDuration;
126
127 // Array of events queued for this state
129
130 // Event listeners for this specific event
132
133 FEventQuantizationState()
134 : FrameCount(0)
135 , EventFrameDuration(INDEX_NONE)
136 {}
137 };
138
139 SIGNALPROCESSING_API void NotifyEventForState(FEventQuantizationState& State, EEventQuantization Type, bool bIsQuantizationEvent, int32 NumFrames);
140
141 // The frame count of the whole event quantizer since it started. Passed to listeners.
142 uint32 FrameCount;
143 uint32 NumFramesPerBar;
144 uint32 NumFramesPerBeat;
145
146 // Scratch buffer for copied events
148
149 // The quantization settings of the event quantizer
150 FEventQuantizationSettings QuantizationSettings;
151 EEventQuantization EventQuantizationForSettingsChange;
152
153 // Array of quantization states, one for each quantization type
154 // Zero'th index is reserved for pending quantization events
155 FEventQuantizationState EventQuantizationStates[(int32)EEventQuantization::Count];
156
157 // Quantization state used for quantizing BPM changes
158 FEventQuantizationState BPMQuantizationState;
159
160 // Whether or not we've set the quantization settings
161 bool bQuantizationSettingsSet;
162
163 // Whether or not to reset pending event states. Set after quantization settings have changed.
164 bool bResetEventState;
165 };
166
167
168
169}
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition EventQuantizer.h:75
float GetBPM() const
Definition EventQuantizer.h:86
SIGNALPROCESSING_API void SetQuantizationSettings(const FEventQuantizationSettings &QuantizationSettings)
Definition EventQuantizer.cpp:21
SIGNALPROCESSING_API void UnregisterListenerForEvent(IQuantizedEventListener *InListener)
Definition EventQuantizer.cpp:339
SIGNALPROCESSING_API void RegisterListenerForEvent(IQuantizedEventListener *InListener, EEventQuantization InQuantization)
Definition EventQuantizer.cpp:329
uint16 GetBeatDivision() const
Definition EventQuantizer.h:90
const FEventQuantizationSettings & GetQuantizationSettings() const
Definition EventQuantizer.h:82
SIGNALPROCESSING_API void SetBeatDivision(const uint16 InBeatDivision)
Definition EventQuantizer.cpp:182
SIGNALPROCESSING_API uint32 GetDurationInFrames(int32 NumBars, float NumBeats) const
Definition EventQuantizer.cpp:319
SIGNALPROCESSING_API FEventQuantizer()
Definition EventQuantizer.cpp:7
SIGNALPROCESSING_API float GetPlaybacktimeSeconds() const
Definition EventQuantizer.cpp:314
SIGNALPROCESSING_API void NotifyEvents(int32 NumFrames)
Definition EventQuantizer.cpp:284
SIGNALPROCESSING_API ~FEventQuantizer()
Definition EventQuantizer.cpp:17
SIGNALPROCESSING_API void EnqueueEvent(EEventQuantization InQuantization, TFunction< void(uint32 NumFramesOffset)> Lambda)
Definition EventQuantizer.cpp:324
SIGNALPROCESSING_API void SetBPM(const float InBPM)
Definition EventQuantizer.cpp:166
Definition EventQuantizer.h:63
virtual void OnEvent(EEventQuantization EventQuantizationType, int32 Bars, float Beat)=0
Definition Array.h:670
Definition AndroidPlatformMisc.h:14
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
EEventQuantization
Definition EventQuantizer.h:10
Definition EventQuantizer.h:30
FEventQuantizationSettings()
Definition EventQuantizer.h:49
EEventQuantization GlobalQuantization
Definition EventQuantizer.h:44
float BeatsPerMinute
Definition EventQuantizer.h:38
uint32 SampleRate
Definition EventQuantizer.h:32
uint16 BeatDivision
Definition EventQuantizer.h:47
uint32 BeatsPerBar
Definition EventQuantizer.h:41
uint32 NumChannels
Definition EventQuantizer.h:35