-
Notifications
You must be signed in to change notification settings - Fork 6
/
FmodManager.hx
324 lines (268 loc) · 10.6 KB
/
FmodManager.hx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
package haxefmod;
import haxefmod.FmodEvents.FmodEventListener;
import haxefmod.FmodManagerPrivate;
@:access(haxefmod.FmodManagerPrivate)
class FmodManager {
//// System
/**
Enables console debug messages for the system-specific calls made to FMOD
**/
public static function EnableDebugMessages() {
FmodManagerPrivate.GetInstance().EnableDebugMessages();
}
/**
Explicitly starts the FMOD audio engine (only required on html5)
**/
public static function Initialize() {
FmodManagerPrivate.GetInstance();
}
/**
Returns true if the FMOD audio engine is initialized
**/
public static function IsInitialized():Bool {
return FmodManagerPrivate.GetInstance().IsInitialized();
}
/**
A call required to process asynchronous events. This should be in the main update loop of the game
**/
public static function Update() {
FmodManagerPrivate.GetInstance().Update();
}
public static function StopAllSounds() {
FmodManagerPrivate.GetInstance().StopAllSounds();
}
public static function PauseAllSounds() {
FmodManagerPrivate.GetInstance().PauseAllSounds();
}
public static function UnpauseAllSounds() {
FmodManagerPrivate.GetInstance().UnpauseAllSounds();
}
/**
Prints out a warning message to console if Update() has not been called recently
**/
public static function CheckIfUpdateIsBeingCalled() {
FmodManagerPrivate.GetInstance().CheckIfUpdateIsBeingCalled();
}
//// Music
/**
Plays a song from the sound bank
@param songPath bank path of the song event in the sound bank
**/
public static function PlaySong(songPath:String) {
FmodManagerPrivate.GetInstance().PlaySong(songPath);
}
/**
Used to transition between two songs
Sends the "stop" command to the FMOD API and waits for the
current song to stop before playing a new song from the sound bank
@param songPath bank path of the song event in the sound bank
@see https://tanneris.me/FMOD-AHDSR
**/
public static function PlaySongTransition(songPath:String) {
FmodManagerPrivate.GetInstance().PlaySongTransition(songPath);
}
/**
Gets an event parameter value from the song
@param parameterName name of parameter on song
**/
public static function GetEventParameterOnSong(parameterName:String) {
return FmodManagerPrivate.GetInstance().GetEventParameterOnSong(parameterName);
}
/**
Sets an event parameter value on the song
Setting a parameter when the game is paused will require a manual call to Update() for FMOD to see the change
@param parameterName name of parameter on song
@param parameterValue value for parameter
**/
public static function SetEventParameterOnSong(parameterName:String, parameterValue:Float) {
FmodManagerPrivate.GetInstance().SetEventParameterOnSong(parameterName, parameterValue);
}
/**
Sends the "stop" command to the FMOD API for the current song
**/
public static function StopSong() {
FmodManagerPrivate.GetInstance().StopSong();
}
/**
If a song is playing, it will stop immediately
**/
public static function StopSongImmediately() {
FmodManagerPrivate.GetInstance().StopSongImmediately();
}
/**
If a song is playing, it will pause
**/
public static function PauseSong() {
FmodManagerPrivate.GetInstance().PauseSong();
}
/**
If a song is paused, it will unpause
**/
public static function UnpauseSong() {
FmodManagerPrivate.GetInstance().UnpauseSong();
}
/**
If a song is paused, it will unpause
**/
public static function ClearAllCallbacks() {
FmodManagerPrivate.GetInstance().ClearAllCallbacks();
}
/**
Returns true if a song is playing
**/
public static function IsSongPlaying():Bool {
return FmodManagerPrivate.GetInstance().IsSongPlaying();
}
/**
Gets the event path of the current song.
If no song is playing, returns an empty string
**/
public static function GetCurrentSongPath():String {
return FmodManagerPrivate.GetInstance().GetCurrentSongPath();
}
//// Sound effects
/**
Plays a sound in a fire-and-forget fashion
There is no way to interact with these sounds once they are started
Follows the Master Track rules which are set in FMOD Studio (Max Instances, Stealing, and probably more)
@param soundPath bank path of the sound event in the sound bank
@see https://tanneris.me/FMOD-Macro-Controls
**/
public static function PlaySoundOneShot(soundPath:String) {
FmodManagerPrivate.GetInstance().PlaySoundOneShot(soundPath);
}
/**
Plays a sound and returns the Id to allow further interactions
When this sound is no longer needed, call ReleaseSound to cleanup memory
Simple sound effects should be played with PlaySoundOneShot
@param soundPath bank path of the sound event in the sound bank
@return soundId of the new event instance
**/
public static function PlaySoundWithReference(soundPath:String):String {
return FmodManagerPrivate.GetInstance().PlaySoundWithReference(soundPath);
}
/**
Plays a sound and sets the reference Id
When this sound is no longer needed, call ReleaseSound to cleanup memory
Simple sound effects should be played with PlaySoundOneShot
@param soundPath bank path of the sound event in the sound bank
@return soundId of the new event instance
**/
public static function PlaySoundAndAssignId(soundPath:String, soundId:String):String {
return FmodManagerPrivate.GetInstance().PlaySoundAndAssignId(soundPath, soundId);
}
/**
Checks if a given sound Id is loaded
@param soundId Id of a loaded sound
@return bool
**/
public static function IsSoundLoaded(soundId:String):Bool {
return FmodManagerPrivate.GetInstance().IsSoundLoaded(soundId);
}
/**
Checks if a given sound Id is currently playing
@param soundId Id of a loaded sound
@return bool
**/
public static function IsSoundPlaying(soundId:String):Bool {
return FmodManagerPrivate.GetInstance().IsSoundPlaying(soundId);
}
/**
Gets an event parameter value from a sound
@param soundId Id of a loaded sound
@param parameterName name of parameter on sound
**/
public static function GetEventParameterOnSound(soundId:String, parameterName:String):Float {
return FmodManagerPrivate.GetInstance().GetEventParameterOnSound(soundId, parameterName);
}
/**
Sets an event parameter value on a sound
Setting a parameter when the game is paused will require a manual call to Update() for FMOD to see the change
@param soundId Id of a loaded sound
@param parameterName name of parameter on sound
@param parameterValue value for parameter
**/
public static function SetEventParameterOnSound(soundId:String, parameterName:String, parameterValue:Float) {
FmodManagerPrivate.GetInstance().SetEventParameterOnSound(soundId, parameterName, parameterValue);
}
/**
Stops a sound for the provided sound Id
To stop a sound immediately, use StopSoundImmediately(soundId)
@param soundId Id of a loaded sound
**/
public static function StopSound(soundId:String) {
FmodManagerPrivate.GetInstance().StopSound(soundId);
}
/**
Immediately stops a sound for the provided sound Id
@param soundId Id of a loaded sound
**/
public static function StopSoundImmediately(soundId:String) {
FmodManagerPrivate.GetInstance().StopSoundImmediately(soundId);
}
/**
Pauses a sound
@param soundId Id of a loaded sound
**/
public static function PauseSound(soundId:String) {
FmodManagerPrivate.GetInstance().PauseSound(soundId);
}
/**
Unpauses a sound
@param soundId Id of a loaded sound
**/
public static function UnpauseSound(soundId:String) {
FmodManagerPrivate.GetInstance().UnpauseSound(soundId);
}
/**
Immediately stops a sound for the provided sound Id and releases it from memory
@param soundId Id of a loaded sound
**/
public static function ReleaseSound(soundId:String) {
FmodManagerPrivate.GetInstance().ReleaseSound(soundId);
}
//// Callbacks
/**
Register a callback for the current song
@param callback Function to execute when the provided playbackEventMask is triggered
@param playbackEventMask Event mask that will trigger the callback
@see The FmodCallback class in FmodEvents.hx
@see https://tanneris.me/FMOD-Callback-Types
**/
public static function RegisterCallbacksForSong(callback:Void->Void, playbackEventMask:UInt) {
FmodManagerPrivate.GetInstance().RegisterCallbacksForSong(callback, playbackEventMask);
}
/**
Disables callbacks for the current song
**/
private function UnregisterCallbacksForSong() {
FmodManagerPrivate.GetInstance().UnregisterCallbacksForSong();
}
/**
Register a callback for a sound
@param soundId Id of a loaded sound
@param callback Function to execute when the provided playbackEventMask is triggered
@param playbackEventMask Event mask that will trigger the callback
@see The FmodCallback class in FmodEvents.hx
@see https://tanneris.me/FMOD-Callback-Types
**/
public static function RegisterCallbacksForSound(soundId:String, callback:Void->Void, playbackEventMask:UInt) {
FmodManagerPrivate.GetInstance().RegisterCallbacksForSound(soundId, callback, playbackEventMask);
}
/**
Disables callbacks for a sound
@param soundId Id of a sound with registered callbacks
**/
private function UnregisterCallbacksForSound(soundId:String) {
FmodManagerPrivate.GetInstance().UnregisterCallbacksForSound(soundId);
}
//// Utility
/**
Experimental: register any class that satisfies the FmodEventLister interface
Will be used to allow utility methods (like screen transition helpers) for any Haxe framework
@param eventListener An implementer of the FmodEventListener interface
**/
public static function RegisterEventListener(eventListener:FmodEventListener) {
FmodManagerPrivate.GetInstance().RegisterEventListener(eventListener);
}
}