/// <summary>
        /// Stop playing the sound
        /// </summary>
        public void Stop()
        {
            if (!_isPlaying)
            {
                return;
            }
            _isPaused  = false;
            _isPlaying = false;
            if (_update != null)
            {
                StopCoroutine(_update);
                _update = null;
            }

            MainMultiAudioListener.OnVirtualAudioListenerAdded   -= VirtualAudioListenerAdded;
            MainMultiAudioListener.OnVirtualAudioListenerRemoved -= VirtualAudioListenerRemoved;

            //Remove all old subAudio
            foreach (var subAudioSource in _subAudioSources)
            {
                if (subAudioSource.Value != null)
                {
                    MainMultiAudioListener.EnquequeAudioSourceInPool(subAudioSource.Value);
                }
            }
            _subAudioSources.Clear();

            if (_safetyAudioSource != null)
            {
                _safetyAudioSource.Stop();
            }
        }
        private void VirtualAudioListenerRemoved(VirtualMultiAudioListener virtualAudioListener)
        {
            var audioSource = _subAudioSources[virtualAudioListener];

            _subAudioSources.Remove(virtualAudioListener);

            if (audioSource != null)
            {
                MainMultiAudioListener.EnquequeAudioSourceInPool(audioSource);
            }
        }
        private void OnDestroy()
        {
            //Stop all sounds and destroy the safety audio source
            if (_isPlaying)
            {
                Stop();
            }

            if (_safetyAudioSource != null)
            {
                MainMultiAudioListener.EnquequeAudioSourceInPool(_safetyAudioSource);
            }
        }