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;
	}