FMOD_RESULT F_CALLBACK programmerSoundCallback(FMOD_STUDIO_EVENT_CALLBACK_TYPE type, FMOD_STUDIO_EVENTINSTANCE* event, void *parameters) { FMOD::Studio::EventInstance* eventInstance = (FMOD::Studio::EventInstance*)event; if (type == FMOD_STUDIO_EVENT_CALLBACK_CREATE_PROGRAMMER_SOUND) { FMOD_STUDIO_PROGRAMMER_SOUND_PROPERTIES* props = (FMOD_STUDIO_PROGRAMMER_SOUND_PROPERTIES*)parameters; // Get our context from the event instance user data ProgrammerSoundContext* context = NULL; CHECK_RESULT( eventInstance->getUserData((void**)&context) ); // Create the sound FMOD::Sound* sound = NULL; CHECK_RESULT( context->system->createSound(context->soundName, FMOD_CREATECOMPRESSEDSAMPLE | FMOD_NONBLOCKING, NULL, &sound) ); // Pass the sound to FMOD props->sound = (FMOD_SOUND*)sound; } else if (type == FMOD_STUDIO_EVENT_CALLBACK_DESTROY_PROGRAMMER_SOUND) { FMOD_STUDIO_PROGRAMMER_SOUND_PROPERTIES* props = (FMOD_STUDIO_PROGRAMMER_SOUND_PROPERTIES*)parameters; // Obtain the sound FMOD::Sound* sound = (FMOD::Sound*)props->sound; // Release the sound CHECK_RESULT( sound->release() ); } return FMOD_OK; }
FMOD_RESULT F_CALLBACK UFMODAudioComponent_EventCallback(FMOD_STUDIO_EVENT_CALLBACK_TYPE type, FMOD_STUDIO_EVENTINSTANCE *event, void *parameters) { UFMODAudioComponent* Component = nullptr; FMOD::Studio::EventInstance* Instance = (FMOD::Studio::EventInstance*)event; if (Instance->getUserData((void**)&Component) == FMOD_OK && Component != nullptr) { if (type == FMOD_STUDIO_EVENT_CALLBACK_TIMELINE_MARKER) { Component->EventCallbackAddMarker((FMOD_STUDIO_TIMELINE_MARKER_PROPERTIES*)parameters); } else if (type == FMOD_STUDIO_EVENT_CALLBACK_TIMELINE_BEAT) { Component->EventCallbackAddBeat((FMOD_STUDIO_TIMELINE_BEAT_PROPERTIES*)parameters); } } return FMOD_OK; }