static FMOD.RESULT BeatEventCallback(FMOD.Studio.EVENT_CALLBACK_TYPE type, IntPtr instancePtr, IntPtr parameterPtr) { // Recreate the event instance object FMOD.Studio.EventInstance instance = new FMOD.Studio.EventInstance(instancePtr); // Retrieve the user data IntPtr timelineInfoPtr; instance.getUserData(out timelineInfoPtr); // Get the object to store beat and marker details GCHandle timelineHandle = GCHandle.FromIntPtr(timelineInfoPtr); TimelineInfo timelineInfo = (TimelineInfo)timelineHandle.Target; switch (type) { case FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_BEAT: { var parameter = (FMOD.Studio.TIMELINE_BEAT_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_BEAT_PROPERTIES)); timelineInfo.currentMusicBar = parameter.bar; } break; case FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_MARKER: { var parameter = (FMOD.Studio.TIMELINE_MARKER_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_MARKER_PROPERTIES)); timelineInfo.lastMarker = parameter.name; } break; } return(FMOD.RESULT.OK); }
static FMOD.RESULT BeatEventCallback(FMOD.Studio.EVENT_CALLBACK_TYPE type, FMOD.Studio.EventInstance instance, IntPtr parameterPtr) { // Retrieve the user data IntPtr timelineInfoPtr; FMOD.RESULT result = instance.getUserData(out timelineInfoPtr); if (result != FMOD.RESULT.OK) { UnityEngine.Debug.LogError("Timeline Callback error: " + result); } else if (timelineInfoPtr != IntPtr.Zero) { // Get the object to store beat and marker details GCHandle timelineHandle = GCHandle.FromIntPtr(timelineInfoPtr); TimelineInfo timelineInfo = (TimelineInfo)timelineHandle.Target; switch (type) { case FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_BEAT: { var parameter = (FMOD.Studio.TIMELINE_BEAT_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_BEAT_PROPERTIES)); timelineInfo.currentMusicBeat = parameter.beat; } break; case FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_MARKER: { var parameter = (FMOD.Studio.TIMELINE_MARKER_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_MARKER_PROPERTIES)); timelineInfo.lastMarker = parameter.name; } break; } } return(FMOD.RESULT.OK); }
public FMOD.RESULT StudioEventCallback(FMOD.Studio.EVENT_CALLBACK_TYPE type, IntPtr instancePtr, IntPtr parameters) { if (type == FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_MARKER) { var parameter = (FMOD.Studio.TIMELINE_MARKER_PROPERTIES)Marshal.PtrToStructure(parameters, typeof(FMOD.Studio.TIMELINE_MARKER_PROPERTIES)); List <UnityAction> toCall; var markerName = parameter.name + ""; var succes = markerCallbacks.TryGetValue(markerName, out toCall); if (succes) { foreach (var action in toCall) { action(); UnityEngine.Debug.Log("Reached marker: " + markerName); } } } if (type == FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_BEAT) { foreach (var action in beatCallbacks) { action(); } } return(FMOD.RESULT.OK); }
static FMOD.RESULT BeatEventCallback(FMOD.Studio.EVENT_CALLBACK_TYPE type, FMOD.Studio.EventInstance instance, IntPtr parameterPtr) { // Retrieve the user data IntPtr timelineInfoPtr; FMOD.RESULT result = instance.getUserData(out timelineInfoPtr); if (result != FMOD.RESULT.OK) { Debug.LogError("Timeline Callback error: " + result); } else if (timelineInfoPtr != IntPtr.Zero) { // Get the object to store beat and marker details GCHandle timelineHandle = GCHandle.FromIntPtr(timelineInfoPtr); TimelineInfo timelineInfo = (TimelineInfo)timelineHandle.Target; switch (type) { case FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_BEAT: { var parameter = (FMOD.Studio.TIMELINE_BEAT_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_BEAT_PROPERTIES)); //print("BEAT " + parameter.beat + " CALLBACK"); timelineInfo.currentMusicBar = parameter.bar; timelineInfo.currentMusicBeat = parameter.beat; timelineInfo.currentMusicTempo = parameter.tempo; timelineInfo.currentMusicPosition = parameter.position; timelineInfo.currentMusicTimeSignatureUpper = parameter.timesignatureupper; timelineInfo.currentMusicTimeSignatureLower = parameter.timesignaturelower; FmodMusicHandler.instance.onBeatDelegate(); } break; case FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_MARKER: { var parameter = (FMOD.Studio.TIMELINE_MARKER_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_MARKER_PROPERTIES)); timelineInfo.lastMarker = parameter.name; //print(parameter.name + " MARKER CALLBACK"); if (FmodChordInterpreter.instance != null && FmodChordInterpreter.instance.IsFmodMarkerChordInformation(parameter.name)) { FmodChordInterpreter.instance.ParseChordFromMarker(parameter.name); if (FmodMusicHandler.instance.onChordMarkerDelegate != null) { FmodMusicHandler.instance.onChordMarkerDelegate(FmodChordInterpreter.instance.GetFmodChord()); } //FmodChordInterpreter.instance.PrintCurrentChord(); } } break; case FMOD.Studio.EVENT_CALLBACK_TYPE.STARTED: { //print("FMOD EVENT STARTED!"); } break; } } return(FMOD.RESULT.OK); }
static FMOD.RESULT BeatEventCallback(FMOD.Studio.EVENT_CALLBACK_TYPE type, FMOD.Studio.EventInstance instance, IntPtr parameterPtr) { //Debug.Log("callback"); // Retrieve the user data IntPtr timelineInfoPtr; FMOD.RESULT result = instance.getUserData(out timelineInfoPtr); if (result != FMOD.RESULT.OK) { Debug.LogError("Timeline Callback error: " + result); } else if (timelineInfoPtr != IntPtr.Zero) { // Get the object to store beat and marker details GCHandle timelineHandle = GCHandle.FromIntPtr(timelineInfoPtr); TimelineInfo timelineInfo = (TimelineInfo)timelineHandle.Target; var parameter = (FMOD.Studio.TIMELINE_BEAT_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_BEAT_PROPERTIES)); if (parameter.tempo != 0) { bpm = (int)parameter.tempo; } switch (type) { case FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_BEAT: { //var parameter = (FMOD.Studio.TIMELINE_BEAT_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_BEAT_PROPERTIES)); timelineInfo.currentMusicBar = parameter.bar; bar = timelineInfo.currentMusicBar; //Debug.Log("bedug 1"); timelineInfo.currentMusicBeat = parameter.beat; beat = timelineInfo.currentMusicBeat; } break; case FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_MARKER: { var marker_param = (FMOD.Studio.TIMELINE_MARKER_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_MARKER_PROPERTIES)); timelineInfo.lastMarker = marker_param.name; marker = timelineInfo.lastMarker; //var parameter = (FMOD.Studio.TIMELINE_BEAT_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_BEAT_PROPERTIES)); //timelineInfo.currentMusicBeat = parameter.beat; //beat = timelineInfo.currentMusicBeat; //markerEvent.Invoke(); //Debug.Log("bedug 2"); } break; } } return(FMOD.RESULT.OK); }
static private FMOD.RESULT OnEventInstanceStopped(FMOD.Studio.EVENT_CALLBACK_TYPE type, IntPtr _event, IntPtr parameters) { FMOD.Studio.EventInstance instance = new FMOD.Studio.EventInstance(_event); IntPtr data; instance.getUserData(out data); ((Stack <FMOD.Studio.EventInstance>)GCHandle.FromIntPtr(data).Target).Push(instance); return(FMOD.RESULT.OK); }
FMOD.RESULT BeatEventCallback(FMOD.Studio.EVENT_CALLBACK_TYPE type, FMOD.Studio.EventInstance instance, IntPtr parameterPtr) { IntPtr timelineInfoPtr; FMOD.RESULT result = instance.getUserData(out timelineInfoPtr); if (result != FMOD.RESULT.OK) { Debug.LogError("Timeline Callback error: " + result); } else if (timelineInfoPtr != IntPtr.Zero) { GCHandle timelineHandle = GCHandle.FromIntPtr(timelineInfoPtr); TimelineInfo timelineInfo = (TimelineInfo)timelineHandle.Target; switch (type) { case FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_BEAT: { var parameter = (FMOD.Studio.TIMELINE_BEAT_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_BEAT_PROPERTIES)); timelineInfo.currentBeat = parameter.beat; timelineInfo.bpm = parameter.tempo; if (OnBeat != null) { OnBeat(); } } break; case FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_MARKER: { var parameter = (FMOD.Studio.TIMELINE_MARKER_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_MARKER_PROPERTIES)); if (OnMarker != null) { OnMarker(); } timelineInfo.lastMarker = parameter.name; timelineInfo.lastMarkerPosition = parameter.position / 1000f; } break; case FMOD.Studio.EVENT_CALLBACK_TYPE.STOPPED: { print("stopped"); } break; } } return(FMOD.RESULT.OK); }
public FMOD.RESULT BeatEventCallBack(FMOD.Studio.EVENT_CALLBACK_TYPE type, FMOD.Studio.EventInstance eventInstance, IntPtr parameters)//this function is called on each beat and it needs to return an a FMOD result and contain all of this information { beatCounter++; print("Callback called" + beatCounter); if (beatCounter >= 16) //after 16 beats we will change the key { switch (musicKey) // switch allows us to switch between statements, our variable is musicKey and we'll switch between b minor and f# { case Music_Key.Key_BMinor: musicKey = Music_Key.Key_FSharp; // when the musicKey is b minor, switch to fsharp break; //exits the function case Music_Key.Key_FSharp: musicKey = Music_Key.Key_BMinor; // when the musicKey is fsharp, switch to bminor break; default: Debug.LogError("Music Key is unknown"); break; //if nothing else matches } beatCounter = 0; } if (playStinger == true) { switch (musicKey) { case Music_Key.Key_BMinor: RuntimeManager.PlayOneShot("event:/Stinger_Bminor"); // if the muskcKey is bminor, play the bminor stinger break; case Music_Key.Key_FSharp: RuntimeManager.PlayOneShot("event:/Stinger_FSharp"); // if the musicKey is fsharp, play the fsharp stinger break; default: Debug.LogError("Music Key is unknown"); break; //if nothing else matches } playStinger = false; //this turns the bool off, so we don't play the stinger over and over again } return(FMOD.RESULT.OK); //this is an enum - a list of states, we need to return a result for callbacks }
private FMOD.RESULT CallBackTriggered(FMOD.Studio.EVENT_CALLBACK_TYPE type, FMOD.Studio.EventInstance instance, IntPtr parameterPtr) { var parameter = (FMOD.Studio.TIMELINE_MARKER_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_MARKER_PROPERTIES)); if (parameter.name == "Percussion Hit") { mausoleumShakeAnimation.Play(0); } if (parameter.name == "Flicker On") { flickerScript.flickerOn(); } if (parameter.name == "Flicker Off") { flickerScript.flickerOff(); } return(FMOD.RESULT.OK); }
private FMOD.RESULT BeatEventCallback(FMOD.Studio.EVENT_CALLBACK_TYPE type, FMOD.Studio.EventInstance instance, IntPtr parameterPtr) { if (type == FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_BEAT) { beatProperties = (FMOD.Studio.TIMELINE_BEAT_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_BEAT_PROPERTIES)); if (changeCameraColor) { camera.backgroundColor = UnityEngine.Random.ColorHSV(); } beatCount++; } else if (type == FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_MARKER) { currentMarkerProperties = (FMOD.Studio.TIMELINE_MARKER_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_MARKER_PROPERTIES)); currentMarker = currentMarkerProperties.name; } return(FMOD.RESULT.OK); }
FMOD.RESULT BeatEventCallback(FMOD.Studio.EVENT_CALLBACK_TYPE type, IntPtr instance, IntPtr parameterPtr) { switch (type) { case FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_BEAT: { var parameter = (FMOD.Studio.TIMELINE_BEAT_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_BEAT_PROPERTIES)); myAnimation.SetTrigger("Beat"); } break; case FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_MARKER: { var parameter = (FMOD.Studio.TIMELINE_MARKER_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_MARKER_PROPERTIES)); //Debug.Log ("marks:" + parameter.name + " " + parameter.position ); } break; } return(FMOD.RESULT.OK); }
static FMOD.RESULT BeatEventCallback(FMOD.Studio.EVENT_CALLBACK_TYPE type, IntPtr instancePtr, IntPtr parameterPtr) { FMOD.Studio.EventInstance instance = new FMOD.Studio.EventInstance(instancePtr); // Retrieve the user data IntPtr timelineInfoPtr; FMOD.RESULT result = instance.getUserData(out timelineInfoPtr); if (result != FMOD.RESULT.OK) { Debug.LogError("Timeline Callback error: " + result); } else if (timelineInfoPtr != IntPtr.Zero) { // Get the object to store beat and marker details GCHandle timelineHandle = GCHandle.FromIntPtr(timelineInfoPtr); TimelineInfo timelineInfo = (TimelineInfo)timelineHandle.Target; switch (type) { case FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_BEAT: { var parameter = (FMOD.Studio.TIMELINE_BEAT_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_BEAT_PROPERTIES)); timelineInfo.currentMusicBeat = parameter.beat; beat = timelineInfo.currentMusicBeat; bpm = parameter.tempo; secPerBeat = 60f / bpm; // Event firing for on beat events. if (OnBeat != null) { OnBeat(); } // Event firing for every other beat. if (beat % 2 != 0) { if (OnOtherBeat != null) { OnOtherBeat(); } } } break; case FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_MARKER: { var parameter = (FMOD.Studio.TIMELINE_MARKER_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_MARKER_PROPERTIES)); timelineInfo.lastMarker = parameter.name; marker = timelineInfo.lastMarker; markerTimeLinePosition = timelinePosition; if (marker.Equals("ENDGAME")) { GameManager.EndMinigame(); } // Event firing for OnMarker events. OnMarker?.Invoke(); } break; } } return(FMOD.RESULT.OK); }
static FMOD.RESULT DialogueEventCallback(FMOD.Studio.EVENT_CALLBACK_TYPE type, FMOD.Studio.EventInstance instance, IntPtr parameterPtr) { IntPtr stringPtr; instance.getUserData(out stringPtr); GCHandle stringHandle = GCHandle.FromIntPtr(stringPtr); String key = stringHandle.Target as String; switch (type) { case FMOD.Studio.EVENT_CALLBACK_TYPE.CREATE_PROGRAMMER_SOUND: { FMOD.MODE soundMode = FMOD.MODE.LOOP_NORMAL | FMOD.MODE.CREATECOMPRESSEDSAMPLE | FMOD.MODE.NONBLOCKING; var parameter = (FMOD.Studio.PROGRAMMER_SOUND_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.PROGRAMMER_SOUND_PROPERTIES)); if (key.Contains(".")) { FMOD.Sound dialogueSound; var soundResult = FMODUnity.RuntimeManager.CoreSystem.createSound(Application.streamingAssetsPath + "/" + key, soundMode, out dialogueSound); if (soundResult == FMOD.RESULT.OK) { parameter.sound = dialogueSound.handle; parameter.subsoundIndex = -1; Marshal.StructureToPtr(parameter, parameterPtr, false); } } else { FMOD.Studio.SOUND_INFO dialogueSoundInfo; var keyResult = FMODUnity.RuntimeManager.StudioSystem.getSoundInfo(key, out dialogueSoundInfo); if (keyResult != FMOD.RESULT.OK) { break; } FMOD.Sound dialogueSound; var soundResult = FMODUnity.RuntimeManager.CoreSystem.createSound(dialogueSoundInfo.name_or_data, soundMode | dialogueSoundInfo.mode, ref dialogueSoundInfo.exinfo, out dialogueSound); if (soundResult == FMOD.RESULT.OK) { parameter.sound = dialogueSound.handle; parameter.subsoundIndex = dialogueSoundInfo.subsoundindex; Marshal.StructureToPtr(parameter, parameterPtr, false); } } } break; case FMOD.Studio.EVENT_CALLBACK_TYPE.DESTROY_PROGRAMMER_SOUND: { var parameter = (FMOD.Studio.PROGRAMMER_SOUND_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.PROGRAMMER_SOUND_PROPERTIES)); var sound = new FMOD.Sound(); sound.handle = parameter.sound; sound.release(); } break; case FMOD.Studio.EVENT_CALLBACK_TYPE.DESTROYED: stringHandle.Free(); break; } return(FMOD.RESULT.OK); }
FMOD.RESULT BeatEventCallback(FMOD.Studio.EVENT_CALLBACK_TYPE type, IntPtr instance, IntPtr parameterPtr) { switch (type) { case FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_BEAT: { var parameter = (FMOD.Studio.TIMELINE_BEAT_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_BEAT_PROPERTIES)); BeatDuration = Time.time - lastBeatTime; lastBeatTime = Time.time; //Debug.Log ("Time " + BeatDuration); currentBeat++; if (currentBeat > 3) { currentBeat = 0; } if (currentBeat >= 0) { switch (cicle[currentBeat]) { case BeatTypes.Normal: EventManager.TriggerEvent("OnBeatZagal", BeatTypes.Normal); EventManager.TriggerEvent("OnBeatPlayer", BeatTypes.Normal); break; case BeatTypes.ZagalLaunch: EventManager.TriggerEvent("OnBeatZagal", BeatTypes.ZagalLaunch); EventManager.TriggerEvent("OnBeatPlayer", BeatTypes.ZagalLaunch); int garbageType = UnityEngine.Random.Range(0, 4); flyingGarbage.Enqueue((GarbageTypes)garbageType); currentgarbage = Instantiate(garbage [garbageType], new Vector3(4.9f, 7.1f, 0f), Quaternion.identity); currentgarbage.GetComponent <Animator> ().speed = 1 * (1 / (BeatDuration * 2)); break; case BeatTypes.Catch: if (flyingGarbage.Dequeue() == playerTrashCan && playerTimeMargin > (Time.time - playerPushTime)) { EventManager.TriggerEvent("OnBeatZagal", BeatTypes.Catch); //EventManager.TriggerEvent("OnBeatPlayer", BeatTypes.Catch); } else { if (!succeed) { EventManager.TriggerEvent("OnBeatZagal", BeatTypes.Fail); EventManager.TriggerEvent("OnBeatPlayer", BeatTypes.Fail); } } break; default: EventManager.TriggerEvent("OnBeatZagal", BeatTypes.Normal); EventManager.TriggerEvent("OnBeatPlayer", BeatTypes.Normal); break; } } else { EventManager.TriggerEvent("OnBeatZagal", BeatTypes.Normal); EventManager.TriggerEvent("OnBeatPlayer", BeatTypes.Normal); } } break; case FMOD.Studio.EVENT_CALLBACK_TYPE.TIMELINE_MARKER: { var parameter = (FMOD.Studio.TIMELINE_MARKER_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.TIMELINE_MARKER_PROPERTIES)); //Debug.Log ("marks:" + parameter.name + " " + parameter.position ); } break; } succeed = false; return(FMOD.RESULT.OK); }
static FMOD.RESULT StoppedOneShotEventCallback(FMOD.Studio.EVENT_CALLBACK_TYPE type, FMOD.Studio.EventInstance instance, IntPtr parameterPtr) { Debug.Log("2. RELEASE ONE SHOT EVENT"); return(FMOD.RESULT.OK); }
static FMOD.RESULT DialogueEventCallback(FMOD.Studio.EVENT_CALLBACK_TYPE type, IntPtr instancePtr, IntPtr parameterPtr) { FMOD.Studio.EventInstance instance = new FMOD.Studio.EventInstance(instancePtr); // Retrieve the user data IntPtr stringPtr; instance.getUserData(out stringPtr); // Get the string object GCHandle stringHandle = GCHandle.FromIntPtr(stringPtr); String key = stringHandle.Target as String; switch (type) { case FMOD.Studio.EVENT_CALLBACK_TYPE.CREATE_PROGRAMMER_SOUND: { FMOD.MODE soundMode = FMOD.MODE.DEFAULT | FMOD.MODE.CREATESTREAM; var parameter = (FMOD.Studio.PROGRAMMER_SOUND_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.PROGRAMMER_SOUND_PROPERTIES)); if (key.Contains(".")) { FMOD.Sound dialogueSound; var soundResult = FMODUnity.RuntimeManager.CoreSystem.createSound(Application.streamingAssetsPath + "/" + key, soundMode, out dialogueSound); if (soundResult == FMOD.RESULT.OK) { parameter.sound = dialogueSound.handle; parameter.subsoundIndex = -1; Marshal.StructureToPtr(parameter, parameterPtr, false); } } else { FMOD.Studio.SOUND_INFO dialogueSoundInfo; var keyResult = FMODUnity.RuntimeManager.StudioSystem.getSoundInfo(key, out dialogueSoundInfo); if (keyResult != FMOD.RESULT.OK) { break; } FMOD.Sound dialogueSound; var soundResult = FMODUnity.RuntimeManager.CoreSystem.createSound(dialogueSoundInfo.name_or_data, soundMode | dialogueSoundInfo.mode, ref dialogueSoundInfo.exinfo, out dialogueSound); if (soundResult == FMOD.RESULT.OK) { parameter.sound = dialogueSound.handle; parameter.subsoundIndex = dialogueSoundInfo.subsoundindex; Marshal.StructureToPtr(parameter, parameterPtr, false); } } } break; case FMOD.Studio.EVENT_CALLBACK_TYPE.DESTROY_PROGRAMMER_SOUND: { var parameter = (FMOD.Studio.PROGRAMMER_SOUND_PROPERTIES)Marshal.PtrToStructure(parameterPtr, typeof(FMOD.Studio.PROGRAMMER_SOUND_PROPERTIES)); var sound = new FMOD.Sound(); sound.handle = parameter.sound; sound.release(); } break; case FMOD.Studio.EVENT_CALLBACK_TYPE.DESTROYED: // Now the event has been destroyed, unpin the string // memory so it can be garbage collected stringHandle.Free(); break; } return(FMOD.RESULT.OK); }
/// <summary> /// Assigns a user callback for every subsequent instance of this event. /// </summary> public void SetCallback(FMOD.Studio.EVENT_CALLBACK callback, FMOD.Studio.EVENT_CALLBACK_TYPE callbackMask) => Native.setCallback(callback, callbackMask);