mirror of
https://github.com/vcmi/vcmi.git
synced 2024-11-30 08:57:00 +02:00
commit
ce669c8a0a
@ -128,8 +128,8 @@ void CSoundHandler::release()
|
|||||||
|
|
||||||
for (auto &chunk : soundChunks)
|
for (auto &chunk : soundChunks)
|
||||||
{
|
{
|
||||||
if (chunk.second)
|
if (chunk.second.first)
|
||||||
Mix_FreeChunk(chunk.second);
|
Mix_FreeChunk(chunk.second.first);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,14 +142,14 @@ Mix_Chunk *CSoundHandler::GetSoundChunk(std::string &sound, bool cache)
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (cache && soundChunks.find(sound) != soundChunks.end())
|
if (cache && soundChunks.find(sound) != soundChunks.end())
|
||||||
return soundChunks[sound];
|
return soundChunks[sound].first;
|
||||||
|
|
||||||
auto data = CResourceHandler::get()->load(ResourceID(std::string("SOUNDS/") + sound, EResType::SOUND))->readAll();
|
auto data = CResourceHandler::get()->load(ResourceID(std::string("SOUNDS/") + sound, EResType::SOUND))->readAll();
|
||||||
SDL_RWops *ops = SDL_RWFromMem(data.first.release(), data.second);
|
SDL_RWops *ops = SDL_RWFromMem(data.first.get(), data.second);
|
||||||
Mix_Chunk *chunk = Mix_LoadWAV_RW(ops, 1); // will free ops
|
Mix_Chunk *chunk = Mix_LoadWAV_RW(ops, 1); // will free ops
|
||||||
|
|
||||||
if (cache)
|
if (cache)
|
||||||
soundChunks.insert(std::pair<std::string, Mix_Chunk *>(sound, chunk));
|
soundChunks.insert(std::pair<std::string, CachedChunk>(sound, std::make_pair (chunk, std::move (data.first))));
|
||||||
|
|
||||||
return chunk;
|
return chunk;
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,8 @@ private:
|
|||||||
SettingsListener listener;
|
SettingsListener listener;
|
||||||
void onVolumeChange(const JsonNode &volumeNode);
|
void onVolumeChange(const JsonNode &volumeNode);
|
||||||
|
|
||||||
std::map<std::string, Mix_Chunk *> soundChunks;
|
using CachedChunk = std::pair<Mix_Chunk *, std::unique_ptr<ui8[]>>;
|
||||||
|
std::map<std::string, CachedChunk> soundChunks;
|
||||||
|
|
||||||
Mix_Chunk *GetSoundChunk(std::string &sound, bool cache);
|
Mix_Chunk *GetSoundChunk(std::string &sound, bool cache);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user