diff --git a/cocos/audio/AudioEngine.cpp b/cocos/audio/AudioEngine.cpp index 5fddeeab3b66..f86ac383abe1 100644 --- a/cocos/audio/AudioEngine.cpp +++ b/cocos/audio/AudioEngine.cpp @@ -349,7 +349,7 @@ void AudioEngine::remove(int audioID) it->second.profileHelper->audioIDs.remove(audioID); } _audioPathIDMap[*it->second.filePath].remove(audioID); - _audioIDInfoMap.erase(audioID); + _audioIDInfoMap.erase(it); } } @@ -394,16 +394,13 @@ void AudioEngine::uncache(const std::string &filePath) { itInfo->second.profileHelper->audioIDs.remove(audioID); } - _audioIDInfoMap.erase(audioID); + _audioIDInfoMap.erase(itInfo); } } _audioPathIDMap.erase(filePath); } - if (_audioEngineImpl) - { - _audioEngineImpl->uncache(filePath); - } + _audioEngineImpl->uncache(filePath); } void AudioEngine::uncacheAll() diff --git a/cocos/audio/linux/AudioEngine-linux.cpp b/cocos/audio/linux/AudioEngine-linux.cpp index e17ca36294b0..83e3fb401c2d 100644 --- a/cocos/audio/linux/AudioEngine-linux.cpp +++ b/cocos/audio/linux/AudioEngine-linux.cpp @@ -72,8 +72,6 @@ AudioEngineImpl::AudioEngineImpl() AudioEngineImpl::~AudioEngineImpl() { FMOD_RESULT result; - result = pSystem->close(); - ERRCHECKWITHEXIT(result); result = pSystem->release(); ERRCHECKWITHEXIT(result); } @@ -109,7 +107,8 @@ int AudioEngineImpl::play2d(const std::string &fileFullPath, bool loop, float vo int id = preload(fileFullPath, nullptr); if (id >= 0) { mapChannelInfo[id].loop=loop; - mapChannelInfo[id].channel->setPaused(true); + // channel is null here. Don't dereference it. It's only set in resume(id). + //mapChannelInfo[id].channel->setPaused(true); mapChannelInfo[id].volume = volume; AudioEngine::_audioIDInfoMap[id].state = AudioEngine::AudioState::PAUSED; resume(id); @@ -287,8 +286,7 @@ void AudioEngineImpl::uncache(const std::string& path) } mapSound.erase(it); } - if (mapId.find(path) != mapId.end()) - mapId.erase(path); + mapId.erase(path); } void AudioEngineImpl::uncacheAll() @@ -320,10 +318,9 @@ int AudioEngineImpl::preload(const std::string& filePath, std::function(mapChannelInfo.size()) + 1; - if (mapId.find(filePath) == mapId.end()) - mapId.insert({filePath, id}); - else - id = mapId.at(filePath); + // std::map::insert returns std::pair + auto channelInfoIter = mapId.insert({filePath, id}); + id = channelInfoIter.first->second; auto& chanelInfo = mapChannelInfo[id]; chanelInfo.sound = sound;