Merge pull request #12547 from MSOpenTech/v3.7-winrt-audio

V3.7 winrt audio fix
This commit is contained in:
pandamicro 2015-06-26 09:47:11 +08:00
commit e9ee303445
1 changed files with 23 additions and 6 deletions

View File

@ -332,6 +332,9 @@ bool AudioPlayer::play2d(AudioCache* cache)
_duration = getDuration();
ret = _play();
}
else {
error();
}
}
return ret;
@ -342,6 +345,7 @@ void AudioPlayer::init()
do {
memset(&_xaBuffer, 0, sizeof(_xaBuffer));
if (FAILED(XAudio2Create(_xaEngine.ReleaseAndGetAddressOf()))) {
error();
break;
}
@ -354,8 +358,10 @@ void AudioPlayer::init()
_xaEngine->RegisterForCallbacks(this);
if (FAILED(_xaEngine->CreateMasteringVoice(&_xaMasterVoice, XAUDIO2_DEFAULT_CHANNELS, XAUDIO2_DEFAULT_SAMPLERATE, 0, nullptr, nullptr, AudioCategory_GameMedia))) {
error();
break;
}
_ready = true;
_state = AudioPlayerState::READY;
} while (false);
@ -363,10 +369,12 @@ void AudioPlayer::init()
void AudioPlayer::free()
{
_ready = false;
_stop();
memset(&_xaBuffer, 0, sizeof(_xaBuffer));
if (_xaEngine) {
_xaEngine->UnregisterForCallbacks(this);
_xaEngine->StopEngine();
}
@ -430,6 +438,7 @@ void AudioPlayer::error()
_criticalError = true;
_ready = false;
_state = AudioPlayerState::ERRORED;
CCLOG("Audio system encountered error.");
}
void AudioPlayer::popBuffer()
@ -537,13 +546,15 @@ void AudioPlayer::OnProcessingPassEnd()
void AudioPlayer::OnCriticalError(HRESULT err)
{
UNREFERENCED_PARAMETER(err);
error();
if (_ready) {
error();
}
}
// IXAudio2VoiceCallback
void AudioPlayer::OnVoiceProcessingPassStart(UINT32 uBytesRequired)
{
if (uBytesRequired && _isStreaming){
if (_ready && uBytesRequired && _isStreaming){
submitBuffers();
}
}
@ -554,7 +565,9 @@ void AudioPlayer::OnVoiceProcessingPassEnd()
void AudioPlayer::OnStreamEnd()
{
onBufferRunOut();
if (_ready) {
onBufferRunOut();
}
}
void AudioPlayer::OnBufferStart(void* pBufferContext)
@ -565,14 +578,16 @@ void AudioPlayer::OnBufferStart(void* pBufferContext)
void AudioPlayer::OnBufferEnd(void* pBufferContext)
{
UNREFERENCED_PARAMETER(pBufferContext);
updateState();
if (_ready) {
updateState();
}
}
void AudioPlayer::OnLoopEnd(void* pBufferContext)
{
UNREFERENCED_PARAMETER(pBufferContext);
if (!_loop) {
if (_ready && !_loop) {
_stop();
}
}
@ -581,7 +596,9 @@ void AudioPlayer::OnVoiceError(void* pBufferContext, HRESULT err)
{
UNREFERENCED_PARAMETER(pBufferContext);
UNREFERENCED_PARAMETER(err);
error();
if (_ready) {
error();
}
}
#endif