void FVolumeManager::Init(uint32 NumElements) { Baseline.Init(-1.0f, NumElements); Attenuation.Init(1.0f, NumElements); VolumeProduct.Init(1.0f, NumElements); FadeScale.Init(NumElements); DynamicScale.Init(NumElements); PriorityWeight.Init(1.0f, NumElements); VolumeWeightedPriority.Init(1.0f, NumElements); EmitterHandle.Init(FEmitterHandle(), NumElements); }
EVoiceError::Type FVoice::Play() { AUDIO_VOICE_CHECK_ERROR(); if (VoiceState != EVoiceState::PLAYING) { // Make sure play is not called 2x on the same voice. bPlayCalled = true; // Build the initialization data for the play call FVoiceInitializationData* VoiceInitData = new FVoiceInitializationData(); VoiceInitData->SoundFile = Params.SoundFile; VoiceInitData->EmitterHandle = Params.Emitter.IsValid() ? ((FEmitter*)Params.Emitter.Get())->GetHandle() : FEmitterHandle(); VoiceInitData->BaselineVolumeScale = Params.BaselineVolumeScale; VoiceInitData->DynamicVolumeScale = PlayInfo.VolumeScale; VoiceInitData->DynamicVolumeTime = PlayInfo.VolumeScaleTime; VoiceInitData->BaselinePitchScale = Params.BaselinePitchScale; VoiceInitData->DynamicPitchScale = PlayInfo.PitchScale; VoiceInitData->DynamicPitchTime = PlayInfo.PitchScaletime; VoiceInitData->PriorityWeight = Params.PriorityWeight; VoiceInitData->DurationSeconds = DurationSeconds; VoiceInitData->VoiceFlags = EVoiceFlag::NONE; if (Params.bIsLooping) { VoiceInitData->VoiceFlags |= EVoiceFlag::LOOPING; } if (Params.Emitter.IsValid()) { VoiceInitData->VoiceFlags |= EVoiceFlag::SPATIALIZED; } // Play the voice with the voice manager check(AudioModule != nullptr); FVoiceManager& VoiceManager = AudioModule->GetVoiceManager(); EVoiceError::Type Result = VoiceManager.PlayVoice(this, VoiceInitData, VoiceHandle); // If nothing went wrong then our VoiceState is "playing" if (Result == EVoiceError::NONE) { VoiceState = EVoiceState::PLAYING; } else { VoiceState = EVoiceState::HAS_ERROR; LastError = Result; } return Result; } return EVoiceError::NONE; }