Custom Clock Source Asset doesn't load

The default tick clock source for level sequences isn’t able to keep time correctly due to accumulated precision errors in delta time (particularly, when the game thread is running late). We needed a clock source that would guarantee clock sync with our audio middleware. The system time timecode provider is capable of this but ofc doesn’t support pausing. So I’ve implemented a custom Pausable System Time Timcode Provider and a custom clock source asset which uses this timecode provider. This works perfectly and is able to keep time with out audio middleware.

However the problem is that the FMovieSceneTimeController_Custom doesn’t actually work with a custom clock source asset. The code uses a weak pointer and assumes the UObject is already loaded, which for the Clock Source Asset it isn’t. Switching the weak pointer to a strong pointer and loading the clock source if it fails to resolve in FMovieSceneTimeController_Custom::ResolveInterfacePtr fixes the issue.

Steps to Reproduce
Create a Custom Clock Source Asset.

Create a Level Sequence and use the custom clock source asset as a clock source for the level sequence.

Press Play to play the level sequence.

Note, the sequence doesn’t play because the clock source asset fails to resolve in FMovieSceneTimeController_Custom::ResolveInterfacePtr.

Hey there,

Clock source asset support is in an odd spot right now where it’s something that was built for a specific use case in fortnite and may not be fully supported as you’ve found. The solution you have would work fine as a workaround, but the approach we recommend is to tie your new clocksource to an object through a component and then assign it to the sequence using the actor clocksource assignment. We don’t have any examples for this shipped with the engine, but this would allow you to make sure that the object is loaded in the level or with the character ahead of time.

Dustin

Thanks for the info, I think since we have the clock source asset working, I will continue with the workaround, but it’s good to know it’s not supported.