public void Play()
        {
            if (State == SoundState.Playing)
            {
                return;
            }
#if DIRECTX
            if (_voice != null)
            {
                // Choose the correct buffer depending on if we are looped.
                var buffer = _loop ? _effect._loopedBuffer : _effect._buffer;

                if (_voice.State.BuffersQueued > 0)
                {
                    _voice.Stop();
                    _voice.FlushSourceBuffers();
                }

                _voice.SubmitSourceBuffer(buffer, null);
                _voice.Start();
            }

            _paused = false;
#else
            if (_sound != null)
            {
#if ANDROID
                if (soundState == SoundState.Paused)
                {
                    _sound.Resume(_streamId);
                }
                else
                {
                    _streamId = _sound.Play();
                }
#else
                if (soundState == SoundState.Paused)
                {
                    _sound.Resume();
                }
                else
                {
                    _sound.Play();
                }
#endif
                soundState = SoundState.Playing;
            }
#endif
        }