private void CleanupAudioFilter()
 {
     if (audioFilter)
     {
         audioFilter.composition = null;
         Object.Destroy(audioFilter);
         Debug.LogFormat("OVRMRAudioFilter destroyed");
         audioFilter = null;
     }
 }
    private void RefreshAudioFilter()
    {
        if (cameraRig != null && (audioListener == null || !audioListener.enabled || !audioListener.gameObject.activeInHierarchy))
        {
            CleanupAudioFilter();

            AudioListener tmpAudioListener = cameraRig.centerEyeAnchor.gameObject.activeInHierarchy ? cameraRig.centerEyeAnchor.GetComponent <AudioListener>() : null;
            if (tmpAudioListener != null && !tmpAudioListener.enabled)
            {
                tmpAudioListener = null;
            }
            if (tmpAudioListener == null)
            {
                if (Camera.main != null && Camera.main.gameObject.activeInHierarchy)
                {
                    tmpAudioListener = Camera.main.GetComponent <AudioListener>();
                    if (tmpAudioListener != null && !tmpAudioListener.enabled)
                    {
                        tmpAudioListener = null;
                    }
                }
            }
            if (tmpAudioListener == null)
            {
                Object[] allListeners = Object.FindObjectsOfType <AudioListener>();
                foreach (var l in allListeners)
                {
                    AudioListener al = l as AudioListener;
                    if (al != null && al.enabled && al.gameObject.activeInHierarchy)
                    {
                        tmpAudioListener = al;
                        break;
                    }
                }
            }
            if (tmpAudioListener == null)
            {
                Debug.LogWarning("[OVRExternalComposition] No AudioListener in scene");
            }
            else
            {
                Debug.LogFormat("[OVRExternalComposition] AudioListener found, obj {0}", tmpAudioListener.gameObject.name);
            }
            audioListener = tmpAudioListener;

            if (audioListener != null)
            {
                audioFilter             = audioListener.gameObject.AddComponent <OVRMRAudioFilter>();
                audioFilter.composition = this;
                Debug.LogFormat("OVRMRAudioFilter added");
            }
        }
    }