float UFMODAudioComponent::GetParameter(FName Name) { float Value = 0.0f; float* StoredParam = StoredParameters.Find(Name); if (StoredParam) { Value = *StoredParam; } if (StudioInstance) { FMOD::Studio::ParameterInstance* ParamInst = nullptr; FMOD_RESULT Result = StudioInstance->getParameter(TCHAR_TO_UTF8(*Name.ToString()), &ParamInst); if (Result == FMOD_OK) { float QueryValue; Result = ParamInst->getValue(&QueryValue); if (Result == FMOD_OK) { Value = QueryValue; } } if (Result != FMOD_OK) { UE_LOG(LogFMOD, Warning, TEXT("Failed to get parameter %s"), *Name.ToString()); } } return Value; }
void SoundManager::updateSoundParameter(void * soundHandle, const char * paramName, const float paramValue, const bool disableOnMax) { #ifdef FMOD_ACTIVE FMOD::Studio::EventInstance * instance = static_cast<FMOD::Studio::EventInstance *>(soundHandle); if ( nullptr != instance && instance->isValid()) { FMOD::Studio::ParameterInstance * parameter = NULL; ERRCHECK(instance->getParameter(paramName, ¶meter)); if (!parameter->isValid()) return; if (disableOnMax) { FMOD_STUDIO_PLAYBACK_STATE instancePlayState; ERRCHECK(instance->getPlaybackState(&instancePlayState)); FMOD_STUDIO_PARAMETER_DESCRIPTION paramDescription; ERRCHECK(parameter->getDescription(¶mDescription)); if ((instancePlayState == FMOD_STUDIO_PLAYBACK_PLAYING || instancePlayState == FMOD_STUDIO_PLAYBACK_SUSTAINING) && paramValue > paramDescription.maximum) { instance->stop(FMOD_STUDIO_STOP_IMMEDIATE); //CCLOG("Suono disabilitato perché troppo distante"); } else if (instancePlayState == FMOD_STUDIO_PLAYBACK_STOPPED && paramValue < paramDescription.maximum) { instance->start(); //CCLOG("Suono riabilitato perché abbastanza vicino"); } } ERRCHECK(parameter->setValue(paramValue)); // ERRCHECK(instance->setParameterValue(paramName, paramValue)); } #endif }
int FMOD_Main() { void *extraDriverData = NULL; Common_Init(&extraDriverData); FMOD::Studio::System* system = NULL; ERRCHECK( FMOD::Studio::System::create(&system) ); ERRCHECK( system->initialize(32, FMOD_STUDIO_INIT_NORMAL, FMOD_INIT_NORMAL, extraDriverData) ); FMOD::Studio::Bank* masterBank = NULL; ERRCHECK( system->loadBankFile(Common_MediaPath("Master Bank.bank"), FMOD_STUDIO_LOAD_BANK_NORMAL, &masterBank) ); FMOD::Studio::Bank* stringsBank = NULL; ERRCHECK( system->loadBankFile(Common_MediaPath("Master Bank.strings.bank"), FMOD_STUDIO_LOAD_BANK_NORMAL, &stringsBank) ); FMOD::Studio::Bank* ambienceBank = NULL; ERRCHECK( system->loadBankFile(Common_MediaPath("Character.bank"), FMOD_STUDIO_LOAD_BANK_NORMAL, &ambienceBank) ); FMOD::Studio::EventDescription* eventDescription = NULL; ERRCHECK( system->getEvent("event:/Character/Footsteps/Footsteps", &eventDescription) ); FMOD::Studio::EventInstance* eventInstance = NULL; ERRCHECK( eventDescription->createInstance(&eventInstance) ); FMOD::Studio::ParameterInstance* surfaceParameter = NULL; ERRCHECK( eventInstance->getParameter("Surface", &surfaceParameter) ); // Make the event audible to start with ERRCHECK( surfaceParameter->setValue(1.0f) ); float surfaceParameterValue = 0; ERRCHECK( surfaceParameter->getValue(&surfaceParameterValue) ); ERRCHECK( eventInstance->start() ); do { Common_Update(); if (Common_BtnPress(BTN_ACTION1)) { surfaceParameterValue -= 1.0f; ERRCHECK( surfaceParameter->setValue(surfaceParameterValue) ); ERRCHECK( surfaceParameter->getValue(&surfaceParameterValue) ); } if (Common_BtnPress(BTN_ACTION2)) { surfaceParameterValue += 1.0f; ERRCHECK( surfaceParameter->setValue(surfaceParameterValue) ); ERRCHECK( surfaceParameter->getValue(&surfaceParameterValue) ); } ERRCHECK( system->update() ); Common_Draw("=================================================="); Common_Draw("Event Parameter Example."); Common_Draw("Copyright (c) Firelight Technologies 2015-2015."); Common_Draw("=================================================="); Common_Draw(""); Common_Draw("Surface Parameter = %1.1f", surfaceParameterValue); Common_Draw(""); Common_Draw("Surface Parameter:"); Common_Draw("Press %s to decrease value", Common_BtnStr(BTN_ACTION1)); Common_Draw("Press %s to increase value", Common_BtnStr(BTN_ACTION2)); Common_Draw(""); Common_Draw("Press %s to quit", Common_BtnStr(BTN_QUIT)); Common_Sleep(50); } while (!Common_BtnPress(BTN_QUIT)); ERRCHECK( system->release() ); Common_Close(); return 0; }
int FMOD_Main() { void *extraDriverData = 0; Common_Init(&extraDriverData); FMOD::Studio::System system; FMOD_RESULT result = FMOD::Studio::System::create(&system); ERRCHECK(result); result = system.initialize(32, FMOD_STUDIO_INIT_NORMAL, FMOD_INIT_NORMAL, extraDriverData); ERRCHECK(result); FMOD::Studio::Bank masterBank; ERRCHECK( system.loadBankFile(Common_MediaPath("Master Bank.bank"), &masterBank) ); FMOD::Studio::Bank stringsBank; ERRCHECK( system.loadBankFile(Common_MediaPath("Master Bank.bank.strings"), &stringsBank) ); FMOD::Studio::Bank vehiclesBank; ERRCHECK( system.loadBankFile(Common_MediaPath("Vehicles.bank"), &vehiclesBank) ); FMOD::Studio::ID eventID = {0}; ERRCHECK( system.lookupEventID("/Vehicles/Basic Engine", &eventID) ); FMOD::Studio::EventDescription eventDescription; ERRCHECK( system.getEvent(&eventID, FMOD_STUDIO_LOAD_BEGIN_NOW, &eventDescription) ); FMOD::Studio::EventInstance eventInstance; ERRCHECK( eventDescription.createInstance(&eventInstance) ); FMOD::Studio::ParameterInstance rpm; ERRCHECK( eventInstance.getParameter("RPM", &rpm) ); ERRCHECK( rpm.setValue(650) ); ERRCHECK( eventInstance.start() ); // Position the listener at the origin FMOD_3D_ATTRIBUTES attributes = { { 0 } }; attributes.forward.z = 1.0f; attributes.up.y = 1.0f; ERRCHECK( system.setListenerAttributes(&attributes) ); // Position the event 2 units in front of the listener attributes.position.z = 2.0f; ERRCHECK( eventInstance.set3DAttributes(&attributes) ); initializeScreenBuffer(); do { Common_Update(); if (Common_BtnPress(BTN_LEFT)) { attributes.position.x -= 1.0f; ERRCHECK( eventInstance.set3DAttributes(&attributes) ); } if (Common_BtnPress(BTN_RIGHT)) { attributes.position.x += 1.0f; ERRCHECK( eventInstance.set3DAttributes(&attributes) ); } if (Common_BtnPress(BTN_UP)) { attributes.position.z += 1.0f; ERRCHECK( eventInstance.set3DAttributes(&attributes) ); } if (Common_BtnPress(BTN_DOWN)) { attributes.position.z -= 1.0f; ERRCHECK( eventInstance.set3DAttributes(&attributes) ); } result = system.update(); ERRCHECK(result); updateScreenPosition(attributes.position); Common_Draw("=================================================="); Common_Draw("Event 3D Example."); Common_Draw("Copyright (c) Firelight Technologies 2012-2013."); Common_Draw("=================================================="); Common_Draw(screenBuffer); Common_Draw("Use the arrow keys (%s, %s, %s, %s) to control the event position", Common_BtnStr(BTN_LEFT), Common_BtnStr(BTN_RIGHT), Common_BtnStr(BTN_UP), Common_BtnStr(BTN_DOWN)); Common_Draw("Press %s to quit", Common_BtnStr(BTN_QUIT)); Common_Sleep(50); } while (!Common_BtnPress(BTN_QUIT)); result = system.release(); ERRCHECK(result); Common_Close(); return 0; }