/// <summary>
        ///     Called when a wrapper is finished.
        /// </summary>
        /// <param name="sender">Sender.</param>
        /// <param name="eventArgs">Event arguments.</param>
        private static void WrapperFinished(object sender, EventArgs eventArgs)
        {
            AudioSourceWrapper wrapper = sender as AudioSourceWrapper;

            wrapper.onClipsFinishedCallback -= WrapperFinished;
            Store(wrapper);
        }
        /// <summary>
        ///     Plays the clip.
        /// </summary>
        /// <param name="position">Position.</param>
        /// <param name="clip">Clip.</param>
        /// <param name="volumeScale">Volume scale.</param>
        /// <param name="pitch">Pitch.</param>
        public static AudioSource PlayOneShot(Vector3 position, AudioClip clip, float volumeScale, float pitch)
        {
            AudioSourceWrapper wrapper = New();

            wrapper.transform.parent   = null;
            wrapper.transform.position = position;
            wrapper.audioSource.pitch  = pitch;

            wrapper.onClipsFinishedCallback += WrapperFinished;
            wrapper.PlayOneShot(clip, volumeScale);

            return(wrapper.audioSource);
        }
        /// <summary>
        ///     Retrieves a stored wrapper, or makes a new one. Enables the GameObject.
        /// </summary>
        private static AudioSourceWrapper New()
        {
            AudioSourceWrapper output = m_Pool.New();

            try
            {
                output.gameObject.SetActive(true);
            }
            catch (MissingReferenceException)
            {
                // The GameObject has been destroyed so return a different one.
                return(New());
            }

            return(output);
        }
 /// <summary>
 ///     Stores and disables the wrapper.
 /// </summary>
 /// <param name="wrapper">Wrapper.</param>
 private static void Store(AudioSourceWrapper wrapper)
 {
     wrapper.gameObject.SetActive(false);
     m_Pool.Store(wrapper);
 }
		/// <summary>
		/// 	Stores and disables the wrapper.
		/// </summary>
		/// <param name="wrapper">Wrapper.</param>
		private static void Store(AudioSourceWrapper wrapper)
		{
			wrapper.gameObject.SetActive(false);
			m_Pool.Store(wrapper);
		}