Version

menu_open
Wwise SDK 2024.1.0
AkCallback.h
Go to the documentation of this file.
1 /*******************************************************************************
2 The content of this file includes portions of the AUDIOKINETIC Wwise Technology
3 released in source code form as part of the SDK installer package.
4 
5 Commercial License Usage
6 
7 Licensees holding valid commercial licenses to the AUDIOKINETIC Wwise Technology
8 may use this file in accordance with the end user license agreement provided
9 with the software or, alternatively, in accordance with the terms contained in a
10 written agreement between you and Audiokinetic Inc.
11 
12 Apache License Usage
13 
14 Alternatively, this file may be used under the Apache License, Version 2.0 (the
15 "Apache License"); you may not use this file except in compliance with the
16 Apache License. You may obtain a copy of the Apache License at
17 http://www.apache.org/licenses/LICENSE-2.0.
18 
19 Unless required by applicable law or agreed to in writing, software distributed
20 under the Apache License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
21 OR CONDITIONS OF ANY KIND, either express or implied. See the Apache License for
22 the specific language governing permissions and limitations under the License.
23 
24  Copyright (c) 2024 Audiokinetic Inc.
25 *******************************************************************************/
26 
27 // AkCallback.h
28 
29 /// \file
30 /// Declaration of callback prototypes
31 
32 
33 #ifndef _AK_CALLBACK_H_
34 #define _AK_CALLBACK_H_
35 
38 
39 namespace AK
40 {
41  class IAkGlobalPluginContext;
42  class IAkMixerInputContext;
43  class IAkMixerPluginContext;
44 }
45 
46 /// Type of callback. Used as a bitfield in methods AK::SoundEngine::PostEvent() and AK::SoundEngine::DynamicSequence::Open().
48 {
49  AK_EndOfEvent = 0x0001, ///< Callback triggered when reaching the end of an event. AkCallbackInfo can be cast to AkEventCallbackInfo.
50  AK_EndOfDynamicSequenceItem = 0x0002, ///< Callback triggered when reaching the end of a dynamic sequence item. AkCallbackInfo can be cast to AkDynamicSequenceItemCallbackInfo.
51  AK_Marker = 0x0004, ///< Callback triggered when encountering a marker during playback. AkCallbackInfo can be cast to AkMarkerCallbackInfo.
52  AK_Duration = 0x0008, ///< Callback triggered when the duration of the sound is known by the sound engine. AkCallbackInfo can be cast to AkDurationCallbackInfo.
53 
54  AK_SpeakerVolumeMatrix = 0x0010, ///< Callback triggered at each frame, letting the client modify the speaker volume matrix. AkCallbackInfo can be cast to AkSpeakerVolumeMatrixCallbackInfo.
55 
56  AK_Starvation = 0x0020, ///< Callback triggered when playback skips a frame due to stream starvation. AkCallbackInfo can be cast to AkEventCallbackInfo.
57 
58  AK_MusicPlaylistSelect = 0x0040, ///< Callback triggered when music playlist container must select the next item to play. AkCallbackInfo can be cast to AkMusicPlaylistCallbackInfo.
59  AK_MusicPlayStarted = 0x0080, ///< Callback triggered when a "Play" or "Seek" command has been executed ("Seek" commands are issued from AK::SoundEngine::SeekOnEvent()). Applies to objects of the Interactive-Music Hierarchy only. AkCallbackInfo can be cast to AkEventCallbackInfo.
60 
61  AK_MusicSyncBeat = 0x0100, ///< Enable notifications on Music Beat. AkCallbackInfo can be cast to AkMusicSyncCallbackInfo.
62  AK_MusicSyncBar = 0x0200, ///< Enable notifications on Music Bar. AkCallbackInfo can be cast to AkMusicSyncCallbackInfo.
63  AK_MusicSyncEntry = 0x0400, ///< Enable notifications on Music Entry Cue. AkCallbackInfo can be cast to AkMusicSyncCallbackInfo.
64  AK_MusicSyncExit = 0x0800, ///< Enable notifications on Music Exit Cue. AkCallbackInfo can be cast to AkMusicSyncCallbackInfo.
65  AK_MusicSyncGrid = 0x1000, ///< Enable notifications on Music Grid. AkCallbackInfo can be cast to AkMusicSyncCallbackInfo.
66  AK_MusicSyncUserCue = 0x2000, ///< Enable notifications on Music Custom Cue. AkCallbackInfo can be cast to AkMusicSyncCallbackInfo.
67  AK_MusicSyncPoint = 0x4000, ///< Enable notifications on Music switch transition synchronization point. AkCallbackInfo can be cast to AkMusicSyncCallbackInfo.
68 
69  AK_MIDIEvent = 0x8000, ///< Enable notifications for MIDI events. AkCallbackInfo can be cast to AkMIDIEventCallbackInfo.
70 
71  AK_Callback_Last = 0x10000, ///< Last calblack unused bit, invalid value.
72 
73  //A few useful bitmasks.
74  AK_MusicSyncAll = 0x7f00, ///< Use this flag if you want to receive all notifications concerning AK_MusicSync registration.
75  AK_CallbackBits = 0xffff, ///< Bitmask for all callback types.
76 
77  // Not callback types, but need to be part of same bitfield for AK::SoundEngine::PostEvent().
78  AK_EnableGetSourcePlayPosition = 0x100000, ///< Enable play position information for use by AK::SoundEngine::GetSourcePlayPosition().
79  AK_EnableGetMusicPlayPosition = 0x200000, ///< Enable play position information of music objects, queried via AK::MusicEngine::GetPlayingSegmentInfo().
80  AK_EnableGetSourceStreamBuffering = 0x400000,///< Enable stream buffering information for use by AK::SoundEngine::GetSourceStreamBuffering().
81 
82  AK_SourceInfo_Last = 0x800000, ///< Last source info enable bit, invalid value.
83 };
84 
85 /// Callback information structure used as base for all notifications handled by \ref AkCallbackFunc.
86 /// \sa
87 /// - AK::SoundEngine::PostEvent()
88 /// - \ref soundengine_events
90 {
91  void * pCookie; ///< User data, passed to PostEvent()
92  AkGameObjectID gameObjID; ///< Game object ID
93 };
94 
95 /// Callback information structure corresponding to \ref AK_EndOfEvent, \ref AK_MusicPlayStarted and \ref AK_Starvation.
96 /// \sa
97 /// - AK::SoundEngine::PostEvent()
98 /// - \ref soundengine_events
100 {
101  AkPlayingID playingID; ///< Playing ID of Event, returned by PostEvent()
102  AkUniqueID eventID; ///< Unique ID of Event, passed to PostEvent()
103 };
104 
105 /// Callback information structure corresponding to \ref AkCallbackType::AK_MIDIEvent
106 /// \sa
107 /// - AK::SoundEngine::PostEvent()
108 /// - \ref soundengine_events
110 {
111  AkMIDIEvent midiEvent; ///< MIDI event triggered by event.
112 };
113 
114 
115 /// Callback information structure corresponding to \ref AK_Marker.
116 /// \sa
117 /// - AK::SoundEngine::PostEvent()
118 /// - \ref soundengine_events
119 /// - \ref soundengine_markers
121 {
122  AkUInt32 uIdentifier; ///< Cue point identifier
123  AkUInt32 uPosition; ///< Position in the cue point (unit: sample frames)
124  const char* strLabel; ///< Label of the marker (null-terminated)
125  AkUInt32 uLabelSize; ///< Size of the label string (including the terminating null character)
126 };
127 
128 /// Callback information structure corresponding to \ref AK_Duration.
129 /// \sa
130 /// - AK::SoundEngine::PostEvent()
131 /// - \ref soundengine_events
133 {
134  AkReal32 fDuration; ///< Duration of the sound (unit: milliseconds)
135  AkReal32 fEstimatedDuration; ///< Estimated duration of the sound depending on source settings such as pitch. (unit: milliseconds)
136  AkUniqueID audioNodeID; ///< Audio Node ID of playing item
137  AkUniqueID mediaID; ///< Media ID of playing item. (corresponds to 'ID' attribute of 'File' element in SoundBank metadata file)
138  bool bStreaming; ///< True if source is streaming, false otherwise.
139 };
140 
141 /// Callback information structure corresponding to \ref AK_EndOfDynamicSequenceItem.
142 /// \sa
143 /// - AK::SoundEngine::PostEvent()
144 /// - AK::SoundEngine::DynamicSequence::Open()
145 /// - \ref soundengine_events
147 {
148  AkPlayingID playingID; ///< Playing ID of Dynamic Sequence, returned by AK::SoundEngine:DynamicSequence::Open()
149  AkUniqueID audioNodeID; ///< Audio Node ID of finished item
150  void* pCustomInfo; ///< Custom info passed to the DynamicSequence::Open function
151 };
152 
153 /// Structure describing basic information about the input of a mixer
154 /// \sa
155 /// - \ref goingfurther_speakermatrixcallback
156 /// - AkSpeakerVolumeMatrixCallbackInfo
158 {
159  AkConnectionType eConnectionType; ///< Nature of the connection between this input and the mixer.
160  AkReal32 fCenterPerc; ///< Center percentage of this input, between 0 and 1.
161  AkSpeakerPanningType eSpeakerPanningType; ///< Specifies type of panning logic when object is not 3D spatialized. Applicable only when eSpatializationMode is AK_SpatializationMode_None.
162  Ak3DSpatializationMode eSpatializationMode; ///< The 3D spatialization mode used by this input. Applicable only when the input has listener relative routing (see bHasListenerRelativeRouting).
163  Ak3DPositionType e3DPositionType; ///< Get whether the emitter position is defined by the game alone (AK_3DPositionType_Emitter), or if it is further automated. Applicable only when the input has listener relative routing (see bHasListenerRelativeRouting).
164  bool bHasListenerRelativeRouting; ///< Get the value of this input's Listener Relative Routing option, that is, if the emitter-listener relative association is calculated at this node.
165 };
166 
167 /// Callback information structure corresponding to \ref AK_SpeakerVolumeMatrix, and passed to callbacks registered in RegisterBusVolumeCallback()
168 /// or PostEvent() with AK_SpeakerVolumeMatrix. These callbacks are called at every audio frame for every connection from an input (voice
169 /// or bus) to an output bus (standard or auxiliary), at the point when an input signal is about to be mixed into a mixing bus, but just before
170 /// having been scaled in accordance to volumes authored in Wwise. The volumes are passed via this structure as pointers because they can be modified
171 /// in the callbacks. They are factored into two linear values ([0..1]): a common base value (pfBaseVolume), that is channel-agnostic and represents
172 /// the collapsed gain of all volume changes in Wwise (sliders, actions, RTPC, attenuations, ...), and a matrix of gains per input/output channel,
173 /// which depends on spatialization. Use the methods of AK::SpeakerVolumes::Matrix, defined in AkCommonDefs.h, to perform operations on them.
174 /// Access each input channel of the volumes matrix with AK::SpeakerVolumes::Matrix::GetChannel(), passing it the input and output channel configuration.
175 /// Then, you may access each element of the output vector using the standard bracket [] operator. See AK::SpeakerVolumes for more details.
176 /// It is crucial that the processing done in the callback be lightweight and non-blocking.
177 /// \sa
178 /// - \ref goingfurther_speakermatrixcallback
179 /// - AK::SoundEngine::PostEvent()
180 /// - \ref soundengine_events
181 /// - AK::SoundEngine::RegisterBusVolumeCallback()
183 {
184  AK::SpeakerVolumes::MatrixPtr pVolumes; ///< Pointer to volume matrix describing the contribution of each source channel to destination channels. Use methods of AK::SpeakerVolumes::Matrix to interpret them.
185  AkChannelConfig inputConfig; ///< Channel configuration of the voice/bus.
186  AkChannelConfig outputConfig; ///< Channel configuration of the output bus.
187  AkReal32 * pfBaseVolume; ///< Base volume, common to all channels.
188  AkReal32 * pfEmitterListenerVolume; ///< Emitter-listener pair-specific gain. When there are multiple emitter-listener pairs, this volume is set to that of the loudest pair, and the relative gain of other pairs is applied directly on the channel volume matrix pVolumes.
189  AK::IAkMixerPluginContext * pMixerContext; ///< Output mixing bus context. Use it to access a few useful panning and mixing services, as well as the ID of the output bus. NULL if pContext is the master audio bus.
190  AkMixerInputInfo inputInfo; ///< Information about the current voice/bus about to be mixed into the output bus with specified base volume and volume matrix.
191 };
192 
193 /// Callback information structure allowing to query signal metering on busses, at each frame, after having mixed all their inputs and processed their effects.
194 /// Register the callback using AK::SoundEngine::RegisterBusMeteringCallback.
196 {
197  AK::AkMetering* pMetering; ///< Struct containing metering information.
198  AkChannelConfig channelConfig; ///< Channel configuration of the bus.
199  AkMeteringFlags eMeteringFlags; ///< Metering flags that were asked for in RegisterBusMeteringCallback(). You may only access corresponding meter values from in_pMeteringInfo. Others will fail.
200 };
201 
202 /// Callback information structure allowing to query signal metering on output devices, at each frame.
203 /// Register the callback using AK::SoundEngine::RegisterOutputDeviceMeteringCallback.
205 {
206  AK::AkMetering * pMainMixMetering; ///< Metering information for the main mix
207  AkChannelConfig mainMixConfig; ///< Channel configuration of the main mix
208  AK::AkMetering * pPassthroughMetering; ///< Metering information for the passthrough mix (if any; will be null otherwise)
209  AkChannelConfig passthroughMixConfig; ///< Channel configuration of the passthrough mix (if any; will be invalid otherwise)
210  AkUInt32 uNumSystemAudioObjects; ///< Number of System Audio Objects going out of the output device
211  AK::AkMetering ** ppSystemAudioObjectMetering; ///< Metering information for each System Audio Object (number of elements is equal to uNumSystemAudioObjects)
212  AkMeteringFlags eMeteringFlags; ///< Metering flags that were asked for in RegisterOutputDeviceMeteringCallback(). You may only access corresponding meter values from the metering objects. Others will fail.
213 };
214 
215 /// Callback information structure corresponding to \ref AK_MusicPlaylistSelect.
216 /// Called when a music playlist container must select its next item to play.
217 /// The members uPlaylistSelection and uPlaylistItemDone are set by the sound
218 /// engine before the callback function call. They are set to the next item
219 /// selected by the sound engine. They are to be modified by the callback
220 /// function if the selection is to be changed.
221 /// \sa
222 /// - \ref soundengine_events
223 /// - AK::SoundEngine::PostEvent()
224 /// - \ref soundengine_music_callbacks
226 {
227  AkUniqueID playlistID; ///< ID of playlist node
228  AkUInt32 uNumPlaylistItems; ///< Number of items in playlist node (may be segments or other playlists)
229  AkUInt32 uPlaylistSelection; ///< Selection: set by sound engine, modified by callback function (if not in range 0 <= uPlaylistSelection < uNumPlaylistItems then ignored).
230  AkUInt32 uPlaylistItemDone; ///< Playlist node done: set by sound engine, modified by callback function (if set to anything but 0 then the current playlist item is done, and uPlaylistSelection is ignored)
231 };
232 
233 /// Structure used to query info on active playing segments.
235 {
236  AkTimeMs iCurrentPosition; ///< Current position of the segment, relative to the Entry Cue, in milliseconds. Range is [-iPreEntryDuration, iActiveDuration+iPostExitDuration].
237  AkTimeMs iPreEntryDuration; ///< Duration of the pre-entry region of the segment, in milliseconds.
238  AkTimeMs iActiveDuration; ///< Duration of the active region of the segment (between the Entry and Exit Cues), in milliseconds.
239  AkTimeMs iPostExitDuration; ///< Duration of the post-exit region of the segment, in milliseconds.
240  AkTimeMs iRemainingLookAheadTime;///< Number of milliseconds remaining in the "looking-ahead" state of the segment, when it is silent but streamed tracks are being prefetched.
241  AkReal32 fBeatDuration; ///< Beat Duration in seconds.
242  AkReal32 fBarDuration; ///< Bar Duration in seconds.
243  AkReal32 fGridDuration; ///< Grid duration in seconds.
244  AkReal32 fGridOffset; ///< Grid offset in seconds.
245 };
246 
247 /// Callback information structure corresponding to \ref AK_MusicSyncEntry, \ref AK_MusicSyncBeat, \ref AK_MusicSyncBar, \ref AK_MusicSyncExit, \ref AK_MusicSyncGrid, \ref AK_MusicSyncPoint and \ref AK_MusicSyncUserCue.
248 /// If you need the Tempo, you can compute it using the fBeatDuration
249 /// Tempo (beats per minute) = 60/fBeatDuration
250 /// \sa
251 /// - \ref soundengine_events
252 /// - AK::SoundEngine::PostEvent()
253 /// - \ref soundengine_music_callbacks
255 {
256  AkPlayingID playingID; ///< Playing ID of Event, returned by PostEvent()
257  AkSegmentInfo segmentInfo; ///< Segment information corresponding to the segment triggering this callback.
258  AkCallbackType musicSyncType; ///< Would be either \ref AK_MusicSyncEntry, \ref AK_MusicSyncBeat, \ref AK_MusicSyncBar, \ref AK_MusicSyncExit, \ref AK_MusicSyncGrid, \ref AK_MusicSyncPoint or \ref AK_MusicSyncUserCue.
259  char * pszUserCueName; ///< Cue name (UTF-8 string). Set for notifications AK_MusicSyncUserCue. NULL if cue has no name.
260 };
261 
262 /// Resources data summary structure containing general information about the system
264 {
265  AkReal32 totalCPU; ///< Pourcentage of the cpu time used for processing audio. Please note that the numbers may add up when using multiple threads.
266  AkReal32 pluginCPU; ///< Pourcentage of the cpu time used by plugin processing. Please note that the numbers may add up when using multiple threads.
267  AkUInt32 physicalVoices; ///< Number of active physical voices
268  AkUInt32 virtualVoices; ///< Number of active virtual voices
269  AkUInt32 totalVoices; ///< Number of active physical and virtual voices
270  AkUInt32 nbActiveEvents; ///< Number of events triggered at a certain time
271 };
272 
273 /// Function called on completion of an event, or when a marker is reached.
274 /// \param in_eType Type of callback.
275 /// \param in_pCallbackInfo Pointer to structure containing callback information. This pointer is invalidated as soon as the callback function returns.
276 /// \remarks An event is considered completed once all of its actions have been executed and all the playbacks in this events are terminated.
277 /// \remarks This callback is executed from the audio processing thread. The processing time in the callback function should be minimal. Having too much processing time could result in slowing down the audio processing.
278 /// \remarks Before waiting on an \ref AK_EndOfEvent, make sure that the event is going to end.
279 /// Some events can be continuously playing or infinitely looping, and the callback will not occur unless a specific stop event is sent to terminate the event.
280 /// \sa
281 /// - AK::SoundEngine::PostEvent()
282 /// - AK::SoundEngine::DynamicSequence::Open()
283 /// - \ref soundengine_events
284 /// - \ref soundengine_markers
285 /// - \ref soundengine_music_callbacks
287  AkCallbackType in_eType, ///< Callback type.
288  AkCallbackInfo* in_pCallbackInfo ///< Structure containing desired information. You can cast it to the proper sub-type, depending on the callback type.
289  );
290 
291 /// Function called on at every audio frame for the specified registered busses.
292 /// \sa
293 /// - AkSpeakerVolumeMatrixCallbackInfo
294 /// - AK::SoundEngine::RegisterBusVolumeCallback()
295 /// - \ref goingfurther_speakermatrixcallback
297  AkSpeakerVolumeMatrixCallbackInfo* in_pCallbackInfo ///< Structure containing desired bus information.
298  );
299 
300 /// Function called on at every audio frame for the specified registered busses, just after metering has been computed.
301 /// \sa
302 /// - AK::SoundEngine::RegisterBusMeteringCallback()
303 /// - AK::AkMetering
304 /// - AkBusMeteringCallbackInfo
305 /// - \ref goingfurther_speakermatrixcallback
307  AkBusMeteringCallbackInfo * in_pCallbackInfo ///< Structure containing desired bus information.
308  );
309 
310 /// Function called on at every audio frame for the specified registered output devices, just after metering has been computed.
311 /// \sa
312 /// - AK::SoundEngine::RegisterOutputDeviceMeteringCallback()
313 /// - AK::AkMetering
314 /// - AkOutputDeviceMeteringCallbackInfo
315 /// - \ref goingfurther_speakermatrixcallback
317  AkOutputDeviceMeteringCallbackInfo * in_pCallbackInfo ///< Structure containing desired output device information.
318  );
319 
320 /// Callback prototype used with asynchronous bank load/unload requests.
321 /// This function is called when the bank request has been processed
322 /// and indicates if it was successfully executed or if an error occurred.
323 /// \param in_bankID Identifier of the bank that was explicitly loaded/unloaded.
324 /// In the case of PrepareEvent() or PrepareGameSyncs(), this value contains
325 /// the AkUniqueID of the event/game sync that was prepared/unprepared, if the array contained only
326 /// one element. Otherwise, in_bankID equals AK_INVALID_UNIQUE_ID.
327 /// \param in_pInMemoryBankPtr Value returned when the unloaded bank was loaded using an in memory location
328 /// \param in_eLoadResult Result of the requested action.
329 /// - AK_Success: Load or unload successful.
330 /// - AK_IDNotFound: At least one of the event/game sync identifiers passed to PrepareEvent() or PrepareGameSyncs() does not exist.
331 /// - AK_InsufficientMemory: Insufficient memory to store bank data.
332 /// - AK_BankReadError: I/O error.
333 /// - AK_WrongBankVersion: Invalid bank version: make sure the version of Wwise that
334 /// you used to generate the SoundBanks matches that of the SDK you are currently using.
335 /// - AK_InvalidFile: File specified could not be opened.
336 /// - AK_InvalidParameter: Invalid parameter.
337 /// - AK_Fail: Load or unload failed for any other reason. (Most likely small allocation failure)
338 /// \param in_pCookie Optional cookie that was passed to the bank request.
339 /// \remarks This callback is executed from the bank thread. The processing time in the callback function should be minimal. Having too much processing time could slow down the bank loading process.
340 /// \sa
341 /// - AK::SoundEngine::LoadBank()
342 /// - AK::SoundEngine::UnloadBank()
343 /// - AK::SoundEngine::PrepareEvent()
344 /// - AK::SoundEngine::PrepareGameSyncs()
345 /// - \ref soundengine_banks
347  AkUInt32 in_bankID,
348  const void * in_pInMemoryBankPtr,
349  AKRESULT in_eLoadResult,
350  void * in_pCookie
351  );
352 
353 /// Bit field of various locations in the audio processing loop where the game can be called back.
355 {
356  AkGlobalCallbackLocation_Register = (1 << 0), ///< Right after successful registration of callback/plugin. Typically used by plugins along with AkGlobalCallbackLocation_Term for allocating memory for the lifetime of the sound engine.
357 
358  AkGlobalCallbackLocation_Begin = (1 << 1), ///< Start of audio processing. The number of frames about to be rendered depends on the sink/end-point and can be zero.
359 
360  AkGlobalCallbackLocation_PreProcessMessageQueueForRender = (1 << 2), ///< Start of frame rendering, before having processed game messages.
361  AkGlobalCallbackLocation_PostMessagesProcessed = (1 << 3), ///< After one or more messages have been processed, but before updating game object and listener positions internally.
362  AkGlobalCallbackLocation_BeginRender = (1 << 4), ///< Start of frame rendering, after having processed game messages.
363  AkGlobalCallbackLocation_EndRender = (1 << 5), ///< End of frame rendering.
364 
365  AkGlobalCallbackLocation_End = (1 << 6), ///< End of audio processing.
366 
367  AkGlobalCallbackLocation_Term = (1 << 7), ///< Sound engine termination.
368 
369  AkGlobalCallbackLocation_Monitor = (1 << 8), ///< Send monitor data
370  AkGlobalCallbackLocation_MonitorRecap = (1 << 9), ///< Send monitor data connection to recap.
371 
372  AkGlobalCallbackLocation_Init = (1 << 10), ///< Sound engine initialization.
373 
374  AkGlobalCallbackLocation_Suspend = (1 << 11), ///< Sound engine suspension through \ref AK::SoundEngine::Suspend
375  AkGlobalCallbackLocation_WakeupFromSuspend = (1 << 12), ///< Sound engine awakening through \ref AK::SoundEngine::WakeupFromSuspend
376 
377  AkGlobalCallbackLocation_ProfilerConnect = (1 << 13), ///< Wwise Profiler has connected to the game.
378  AkGlobalCallbackLocation_ProfilerDisconnect = (1 << 14), ///< Wwise Profiler has disconnected from the game.
379 
380 
381  // IMPORTANT: Keep in sync with number of locations.
382  AkGlobalCallbackLocation_Num = 15 ///< Total number of global callback locations.
383 };
384 
385 /// Callback prototype used for global callback registration.
386 /// This callback may be called from various locations within the audio processing loop. The exact location from which it is called is passed in in_eLocation, and corresponds to one of the values
387 /// that were passed to RegisterGlobalCallback(). See the possible values of AkGlobalCallbackLocation for more details about the available locations.
388 /// \remarks This callback is normally executed from the main audio thread. The processing time in the callback function should be minimal. Having too much processing time could cause voice starvation.
389 /// \sa
390 /// - AK::SoundEngine::RegisterGlobalCallback()
391 /// - AK::SoundEngine::UnregisterGlobalCallback()
393  AK::IAkGlobalPluginContext * in_pContext, ///< Engine context.
394  AkGlobalCallbackLocation in_eLocation, ///< Location where this callback is fired.
395  void * in_pCookie ///< User cookie passed to AK::SoundEngine::RegisterGlobalCallback().
396  );
397 
398 
400  const AkResourceMonitorDataSummary * in_pdataSummary ///< Data summary passed to the function registered using AK::SoundEngine::RegisterResourceMonitorCallback().
401  );
402 
403 namespace AK
404 {
406  {
407  AkAudioDeviceEvent_Initialization, ///< Sent after an Audio Device has initialized. Initialization might have failed, check the AKRESULT.
408  AkAudioDeviceEvent_Removal, ///< Audio device was removed through explicit call (AK::SoundEngine::RemoveOutput or AK::SoundEngine::Term)
409  AkAudioDeviceEvent_SystemRemoval, ///< Audio device was removed because of a system event (disconnection), hardware or driver problem. Check the AKRESULT when called through AkDeviceStatusCallbackFunc, it may give more context.
410  AkAudioDeviceEvent_Last ///< End of enum, invalid value.
411  };
412 
413  /// Callback for Audio Device status changes.
414  /// \sa AK::SoundEngine::AddOutput
416  AK::IAkGlobalPluginContext * in_pContext, ///< Engine context.
417  AkUniqueID in_idAudioDeviceShareset, ///< The audio device shareset attached, as passed to AK::SoundEngine::AddOutput or AK::SoundEngine::Init
418  AkUInt32 in_idDeviceID, ///< The audio device specific id, as passed to AK::SoundEngine::AddOutput or AK::SoundEngine::Init
419  AkAudioDeviceEvent in_idEvent, ///< The event for which this callback was called. See AK::AkAudioDeviceEvent. AKRESULT may provide more information.
420  AKRESULT in_AkResult ///< Result of the last operation.
421  );
422 }
423 
424 /// Callback prototype used for audio capture callback registration.
425 /// This callback will be called at the end of each audio frame for each output device that has been registered.
426 /// \remarks This callback will be executed on the main audio thread during real-time rendering and will be executed on the thread that \ref AK::SoundEngine::RenderAudio is called from when offline rendering is enabled.
427 /// \remarks The processing time in the callback function should be minimal. Having too much processing time could cause voice starvation during real-time rendering.
428 /// \remarks Note that a callback registered with <tt>in_idOutput</tt> equal to <tt>AK_INVALID_OUTPUT_DEVICE_ID</tt>, will receive the <tt>AkOutputDeviceID</tt> associated with the main output device.
429 /// \sa
430 /// - AK::SoundEngine::RenderAudio()
431 /// - AK::SoundEngine::RegisterCaptureCallback()
432 /// - AK::SoundEngine::UnregisterCaptureCallback()
434  AkAudioBuffer& in_CaptureBuffer, ///< Capture audio buffer. The data is always float interleaved.
435  AkOutputDeviceID in_idOutput, ///< The audio device specific id, as passed to AK::SoundEngine::AddOutput or AK::SoundEngine::Init
436  void* in_pCookie ///< Callback cookie that will be sent to the callback function along with additional information
437  );
438 
439 #endif // _AK_CALLBACK_H_
440 
Interface to retrieve contextual information for a mixer.
Definition: IAkPlugin.h:445
@ AK_MIDIEvent
Enable notifications for MIDI events. AkCallbackInfo can be cast to AkMIDIEventCallbackInfo.
Definition: AkCallback.h:69
@ AkGlobalCallbackLocation_Num
Total number of global callback locations.
Definition: AkCallback.h:382
Ak3DSpatializationMode eSpatializationMode
The 3D spatialization mode used by this input. Applicable only when the input has listener relative r...
Definition: AkCallback.h:162
const char * strLabel
Label of the marker (null-terminated)
Definition: AkCallback.h:124
AkUniqueID audioNodeID
Audio Node ID of playing item.
Definition: AkCallback.h:136
Resources data summary structure containing general information about the system.
Definition: AkCallback.h:264
AK::AkMetering ** ppSystemAudioObjectMetering
Metering information for each System Audio Object (number of elements is equal to uNumSystemAudioObje...
Definition: AkCallback.h:211
AkInt32 AkTimeMs
Time in ms.
Definition: AkTypes.h:56
Definition of data structures for AkAudioObject.
char * pszUserCueName
Cue name (UTF-8 string). Set for notifications AK_MusicSyncUserCue. NULL if cue has no name.
Definition: AkCallback.h:259
@ AK_EndOfEvent
Callback triggered when reaching the end of an event. AkCallbackInfo can be cast to AkEventCallbackIn...
Definition: AkCallback.h:49
AkGameObjectID gameObjID
Game object ID.
Definition: AkCallback.h:92
@ AkAudioDeviceEvent_Initialization
Sent after an Audio Device has initialized. Initialization might have failed, check the AKRESULT.
Definition: AkCallback.h:407
@ AK_MusicSyncEntry
Enable notifications on Music Entry Cue. AkCallbackInfo can be cast to AkMusicSyncCallbackInfo.
Definition: AkCallback.h:63
bool bHasListenerRelativeRouting
Get the value of this input's Listener Relative Routing option, that is, if the emitter-listener rela...
Definition: AkCallback.h:164
void(* AkResourceMonitorCallbackFunc)(const AkResourceMonitorDataSummary *in_pdataSummary)
Definition: AkCallback.h:399
@ AK_MusicSyncBar
Enable notifications on Music Bar. AkCallbackInfo can be cast to AkMusicSyncCallbackInfo.
Definition: AkCallback.h:62
Ak3DPositionType e3DPositionType
Get whether the emitter position is defined by the game alone (AK_3DPositionType_Emitter),...
Definition: AkCallback.h:163
AkReal32 * pfBaseVolume
Base volume, common to all channels.
Definition: AkCallback.h:187
@ AkGlobalCallbackLocation_EndRender
End of frame rendering.
Definition: AkCallback.h:363
AkChannelConfig mainMixConfig
Channel configuration of the main mix.
Definition: AkCallback.h:207
AkUInt32 uPlaylistSelection
Selection: set by sound engine, modified by callback function (if not in range 0 <= uPlaylistSelectio...
Definition: AkCallback.h:229
@ AK_SourceInfo_Last
Last source info enable bit, invalid value.
Definition: AkCallback.h:82
@ AkGlobalCallbackLocation_Begin
Start of audio processing. The number of frames about to be rendered depends on the sink/end-point an...
Definition: AkCallback.h:358
@ AkGlobalCallbackLocation_Register
Right after successful registration of callback/plugin. Typically used by plugins along with AkGlobal...
Definition: AkCallback.h:356
AkChannelConfig outputConfig
Channel configuration of the output bus.
Definition: AkCallback.h:186
@ AkGlobalCallbackLocation_ProfilerDisconnect
Wwise Profiler has disconnected from the game.
Definition: AkCallback.h:378
@ AK_Duration
Callback triggered when the duration of the sound is known by the sound engine. AkCallbackInfo can be...
Definition: AkCallback.h:52
AkConnectionType eConnectionType
Nature of the connection between this input and the mixer.
Definition: AkCallback.h:159
@ AkGlobalCallbackLocation_End
End of audio processing.
Definition: AkCallback.h:365
AkTimeMs iActiveDuration
Duration of the active region of the segment (between the Entry and Exit Cues), in milliseconds.
Definition: AkCallback.h:238
AkChannelConfig inputConfig
Channel configuration of the voice/bus.
Definition: AkCallback.h:185
AkUInt64 AkGameObjectID
Game object ID.
Definition: AkTypes.h:60
@ AK_MusicSyncAll
Use this flag if you want to receive all notifications concerning AK_MusicSync registration.
Definition: AkCallback.h:74
@ AkGlobalCallbackLocation_Term
Sound engine termination.
Definition: AkCallback.h:367
AKRESULT
Standard function call result.
Definition: AkTypes.h:134
void(* AkGlobalCallbackFunc)(AK::IAkGlobalPluginContext *in_pContext, AkGlobalCallbackLocation in_eLocation, void *in_pCookie)
Definition: AkCallback.h:392
AkMeteringFlags
Metering flags. Used for specifying bus metering, through AK::SoundEngine::RegisterBusVolumeCallback(...
Definition: AkTypes.h:1171
@ AK_Callback_Last
Last calblack unused bit, invalid value.
Definition: AkCallback.h:71
AK::IAkMixerPluginContext * pMixerContext
Output mixing bus context. Use it to access a few useful panning and mixing services,...
Definition: AkCallback.h:189
Structure used to query info on active playing segments.
Definition: AkCallback.h:235
AkReal32 fBeatDuration
Beat Duration in seconds.
Definition: AkCallback.h:241
@ AK_CallbackBits
Bitmask for all callback types.
Definition: AkCallback.h:75
@ AkAudioDeviceEvent_SystemRemoval
Audio device was removed because of a system event (disconnection), hardware or driver problem....
Definition: AkCallback.h:409
void(* AkBusMeteringCallbackFunc)(AkBusMeteringCallbackInfo *in_pCallbackInfo)
Definition: AkCallback.h:306
@ AkGlobalCallbackLocation_Suspend
Sound engine suspension through AK::SoundEngine::Suspend.
Definition: AkCallback.h:374
AkCallbackType
Type of callback. Used as a bitfield in methods AK::SoundEngine::PostEvent() and AK::SoundEngine::Dyn...
Definition: AkCallback.h:48
AkReal32 fDuration
Duration of the sound (unit: milliseconds)
Definition: AkCallback.h:134
@ AkGlobalCallbackLocation_WakeupFromSuspend
Sound engine awakening through AK::SoundEngine::WakeupFromSuspend.
Definition: AkCallback.h:375
@ AkGlobalCallbackLocation_Init
Sound engine initialization.
Definition: AkCallback.h:372
void(* AkOutputDeviceMeteringCallbackFunc)(AkOutputDeviceMeteringCallbackInfo *in_pCallbackInfo)
Definition: AkCallback.h:316
AkTimeMs iPreEntryDuration
Duration of the pre-entry region of the segment, in milliseconds.
Definition: AkCallback.h:237
float AkReal32
32-bit floating point
AkChannelConfig passthroughMixConfig
Channel configuration of the passthrough mix (if any; will be invalid otherwise)
Definition: AkCallback.h:209
AK::AkMetering * pMetering
Struct containing metering information.
Definition: AkCallback.h:197
AK::AkMetering * pMainMixMetering
Metering information for the main mix.
Definition: AkCallback.h:206
void * pCustomInfo
Custom info passed to the DynamicSequence::Open function.
Definition: AkCallback.h:150
@ AkAudioDeviceEvent_Last
End of enum, invalid value.
Definition: AkCallback.h:410
AkUniqueID eventID
Unique ID of Event, passed to PostEvent()
Definition: AkCallback.h:102
AkUInt32 uIdentifier
Cue point identifier.
Definition: AkCallback.h:122
@ AK_Starvation
Callback triggered when playback skips a frame due to stream starvation. AkCallbackInfo can be cast t...
Definition: AkCallback.h:56
AkCallbackType musicSyncType
Would be either AK_MusicSyncEntry, AK_MusicSyncBeat, AK_MusicSyncBar, AK_MusicSyncExit,...
Definition: AkCallback.h:258
AkUInt32 AkUniqueID
Unique 32-bit ID.
Definition: AkTypes.h:52
@ AK_EnableGetSourceStreamBuffering
Enable stream buffering information for use by AK::SoundEngine::GetSourceStreamBuffering().
Definition: AkCallback.h:80
AkReal32 fGridOffset
Grid offset in seconds.
Definition: AkCallback.h:244
Ak3DSpatializationMode
3D spatialization mode.
Definition: AkTypes.h:1160
AkUInt32 uLabelSize
Size of the label string (including the terminating null character)
Definition: AkCallback.h:125
AkUInt32 uPosition
Position in the cue point (unit: sample frames)
Definition: AkCallback.h:123
AkUInt32 physicalVoices
Number of active physical voices.
Definition: AkCallback.h:267
AkSpeakerPanningType eSpeakerPanningType
Specifies type of panning logic when object is not 3D spatialized. Applicable only when eSpatializati...
Definition: AkCallback.h:161
@ AkAudioDeviceEvent_Removal
Audio device was removed through explicit call (AK::SoundEngine::RemoveOutput or AK::SoundEngine::Ter...
Definition: AkCallback.h:408
@ AkGlobalCallbackLocation_MonitorRecap
Send monitor data connection to recap.
Definition: AkCallback.h:370
void(* AkCaptureCallbackFunc)(AkAudioBuffer &in_CaptureBuffer, AkOutputDeviceID in_idOutput, void *in_pCookie)
Definition: AkCallback.h:433
AkPlayingID playingID
Playing ID of Event, returned by PostEvent()
Definition: AkCallback.h:256
@ AK_MusicSyncGrid
Enable notifications on Music Grid. AkCallbackInfo can be cast to AkMusicSyncCallbackInfo.
Definition: AkCallback.h:65
void(* AkCallbackFunc)(AkCallbackType in_eType, AkCallbackInfo *in_pCallbackInfo)
Definition: AkCallback.h:286
AkGlobalCallbackLocation
Bit field of various locations in the audio processing loop where the game can be called back.
Definition: AkCallback.h:355
AkReal32 totalCPU
Pourcentage of the cpu time used for processing audio. Please note that the numbers may add up when u...
Definition: AkCallback.h:265
AkReal32 fCenterPerc
Center percentage of this input, between 0 and 1.
Definition: AkCallback.h:160
AkTimeMs iPostExitDuration
Duration of the post-exit region of the segment, in milliseconds.
Definition: AkCallback.h:239
@ AkGlobalCallbackLocation_PreProcessMessageQueueForRender
Start of frame rendering, before having processed game messages.
Definition: AkCallback.h:360
AkUInt32 uPlaylistItemDone
Playlist node done: set by sound engine, modified by callback function (if set to anything but 0 then...
Definition: AkCallback.h:230
AkReal32 * pfEmitterListenerVolume
Emitter-listener pair-specific gain. When there are multiple emitter-listener pairs,...
Definition: AkCallback.h:188
#define AK_CALLBACK(_type, _name)
@ AK_EnableGetSourcePlayPosition
Enable play position information for use by AK::SoundEngine::GetSourcePlayPosition().
Definition: AkCallback.h:78
AkReal32 fEstimatedDuration
Estimated duration of the sound depending on source settings such as pitch. (unit: milliseconds)
Definition: AkCallback.h:135
void(* AkBusCallbackFunc)(AkSpeakerVolumeMatrixCallbackInfo *in_pCallbackInfo)
Definition: AkCallback.h:296
AkUniqueID audioNodeID
Audio Node ID of finished item.
Definition: AkCallback.h:149
AkUInt32 uNumSystemAudioObjects
Number of System Audio Objects going out of the output device.
Definition: AkCallback.h:210
AkUniqueID playlistID
ID of playlist node.
Definition: AkCallback.h:227
AkPlayingID playingID
Playing ID of Dynamic Sequence, returned by AK::SoundEngine:DynamicSequence::Open()
Definition: AkCallback.h:148
void * pCookie
User data, passed to PostEvent()
Definition: AkCallback.h:91
AkMeteringFlags eMeteringFlags
Metering flags that were asked for in RegisterOutputDeviceMeteringCallback(). You may only access cor...
Definition: AkCallback.h:212
@ AK_EndOfDynamicSequenceItem
Callback triggered when reaching the end of a dynamic sequence item. AkCallbackInfo can be cast to Ak...
Definition: AkCallback.h:50
void(* AkBankCallbackFunc)(AkUInt32 in_bankID, const void *in_pInMemoryBankPtr, AKRESULT in_eLoadResult, void *in_pCookie)
Definition: AkCallback.h:346
@ AkGlobalCallbackLocation_ProfilerConnect
Wwise Profiler has connected to the game.
Definition: AkCallback.h:377
AK::AkMetering * pPassthroughMetering
Metering information for the passthrough mix (if any; will be null otherwise)
Definition: AkCallback.h:208
AkChannelConfig channelConfig
Channel configuration of the bus.
Definition: AkCallback.h:198
Struct containing metering information about a buffer. Depending on when this struct is generated,...
Definition: AkCommonDefs.h:192
@ AK_MusicPlaylistSelect
Callback triggered when music playlist container must select the next item to play....
Definition: AkCallback.h:58
@ AK_MusicSyncExit
Enable notifications on Music Exit Cue. AkCallbackInfo can be cast to AkMusicSyncCallbackInfo.
Definition: AkCallback.h:64
AkReal32 * MatrixPtr
Volume matrix. Access each input channel vector with AK::SpeakerVolumes::Matrix::GetChannel().
@ AK_MusicSyncBeat
Enable notifications on Music Beat. AkCallbackInfo can be cast to AkMusicSyncCallbackInfo.
Definition: AkCallback.h:61
bool bStreaming
True if source is streaming, false otherwise.
Definition: AkCallback.h:138
AkReal32 fBarDuration
Bar Duration in seconds.
Definition: AkCallback.h:242
AkAudioDeviceEvent
Definition: AkCallback.h:406
uint32_t AkUInt32
Unsigned 32-bit integer.
@ AK_EnableGetMusicPlayPosition
Enable play position information of music objects, queried via AK::MusicEngine::GetPlayingSegmentInfo...
Definition: AkCallback.h:79
void(* AkDeviceStatusCallbackFunc)(AK::IAkGlobalPluginContext *in_pContext, AkUniqueID in_idAudioDeviceShareset, AkUInt32 in_idDeviceID, AkAudioDeviceEvent in_idEvent, AKRESULT in_AkResult)
Definition: AkCallback.h:415
AkSpeakerPanningType
Speaker panning type: type of panning logic when object is not 3D spatialized (i.e....
Definition: AkTypes.h:1123
AkUInt64 AkOutputDeviceID
Audio Output device ID.
Definition: AkTypes.h:85
@ AK_MusicSyncPoint
Enable notifications on Music switch transition synchronization point. AkCallbackInfo can be cast to ...
Definition: AkCallback.h:67
AkReal32 pluginCPU
Pourcentage of the cpu time used by plugin processing. Please note that the numbers may add up when u...
Definition: AkCallback.h:266
AkTimeMs iCurrentPosition
Current position of the segment, relative to the Entry Cue, in milliseconds. Range is [-iPreEntryDura...
Definition: AkCallback.h:236
@ AkGlobalCallbackLocation_PostMessagesProcessed
After one or more messages have been processed, but before updating game object and listener position...
Definition: AkCallback.h:361
AkUInt32 uNumPlaylistItems
Number of items in playlist node (may be segments or other playlists)
Definition: AkCallback.h:228
AkReal32 fGridDuration
Grid duration in seconds.
Definition: AkCallback.h:243
AkUInt32 totalVoices
Number of active physical and virtual voices.
Definition: AkCallback.h:269
AkMixerInputInfo inputInfo
Information about the current voice/bus about to be mixed into the output bus with specified base vol...
Definition: AkCallback.h:190
@ AK_SpeakerVolumeMatrix
Callback triggered at each frame, letting the client modify the speaker volume matrix....
Definition: AkCallback.h:54
AK::SpeakerVolumes::MatrixPtr pVolumes
Pointer to volume matrix describing the contribution of each source channel to destination channels....
Definition: AkCallback.h:184
AkMeteringFlags eMeteringFlags
Metering flags that were asked for in RegisterBusMeteringCallback(). You may only access correspondin...
Definition: AkCallback.h:199
AkUInt32 nbActiveEvents
Number of events triggered at a certain time.
Definition: AkCallback.h:270
Ak3DPositionType
3D position type: defines what acts as the emitter position for computing spatialization against the ...
Definition: AkTypes.h:1133
AkUniqueID mediaID
Media ID of playing item. (corresponds to 'ID' attribute of 'File' element in SoundBank metadata file...
Definition: AkCallback.h:137
AkMIDIEvent midiEvent
MIDI event triggered by event.
Definition: AkCallback.h:111
AkConnectionType
Nature of the connection binding an input to a bus.
Definition: AkTypes.h:324
AkUInt32 AkPlayingID
Playing ID.
Definition: AkTypes.h:55
@ AK_Marker
Callback triggered when encountering a marker during playback. AkCallbackInfo can be cast to AkMarker...
Definition: AkCallback.h:51
AkTimeMs iRemainingLookAheadTime
Number of milliseconds remaining in the "looking-ahead" state of the segment, when it is silent but s...
Definition: AkCallback.h:240
AkPlayingID playingID
Playing ID of Event, returned by PostEvent()
Definition: AkCallback.h:101
@ AK_MusicSyncUserCue
Enable notifications on Music Custom Cue. AkCallbackInfo can be cast to AkMusicSyncCallbackInfo.
Definition: AkCallback.h:66
@ AkGlobalCallbackLocation_BeginRender
Start of frame rendering, after having processed game messages.
Definition: AkCallback.h:362
AkUInt32 virtualVoices
Number of active virtual voices.
Definition: AkCallback.h:268
@ AK_MusicPlayStarted
Callback triggered when a "Play" or "Seek" command has been executed ("Seek" commands are issued from...
Definition: AkCallback.h:59
AkSegmentInfo segmentInfo
Segment information corresponding to the segment triggering this callback.
Definition: AkCallback.h:257
@ AkGlobalCallbackLocation_Monitor
Send monitor data.
Definition: AkCallback.h:369

Was this page helpful?

Need Support?

Questions? Problems? Need more info? Contact us, and we can help!

Visit our Support page

Tell us about your project. We're here to help.

Register your project and we'll help you get started with no strings attached!

Get started with Wwise