If playing a large audio and its loop flag is set to false, after the audio is played over, there will be 4 or 8 bytes memory leak by _rotateBufferThread variable.
Resolution:
The `isDestroy` flag should not be set to true in rotate buffer thread, to exiting the thread, we need another varible for this purpose.
Thanks @nicolechen819 for the feedback.
* [audio] Fixes some issues while stop/uncache right after play/preload on OSX/iOS platform.
* Better state control in AudioCache.
* Adds State enum class which contains INITIAL, LOADING, READY, FAILED states.
* AudioPlayer::destroy should check AudioCache::_isAudioLoaded flag, otherwise, app will freeze in cpp-tests/NewAudioEngineTest/6:Test invalid audio file.
* Should check whether state is INITIAL in the destructor of AudioCache.
* Adds test case for switching play state frequently.
* Skips invoking reading data callback if cache's state is INITIAL.
* Variables initialization for AudioCache class and fixes protential missing delete AL buffers.