// NOTE: This function is called at runtime and edit time.  Keep that in mind when setting the values of properties.
        public override void ProcessFrame(Playable playable, FrameData info, object playerData)
        {
            DataListener trackBinding = playerData as DataListener;

            if (trackBinding == null)
            {
                Debug.Log("Track without Trackbinding");
                return;
            }

            int inputCount = playable.GetInputCount();

            for (int i = 0; i < inputCount; i++)
            {
                float inputWeight = playable.GetInputWeight(i);
                ScriptPlayable <RecordingBehaviour> inputPlayable =
                    (ScriptPlayable <RecordingBehaviour>)playable.GetInput(i);
                RecordingBehaviour input = inputPlayable.GetBehaviour();

                // Use the above variables to process each frame of this playable.
                if (inputWeight > 0 && input.recording != null)
                {
                    float timeS    = (float)inputPlayable.GetTime();
                    float duration = input.recording.duration;
                    if (duration > 0)
                    {
                        timeS = timeS % duration; //loop
                    }

                    IDataFrame frame = input.recording.GetDataFrame(timeS);
                    if (frame != null)
                    {
                        trackBinding.ProcessData(frame);
                    }
                }
            }
        }
 public void CleanClone(RecordingBehaviour other)
 {
     watchReference = other.watchReference;
 }