ManaPlus
musicloader.cpp
Go to the documentation of this file.
1 /*
2  * The ManaPlus Client
3  * Copyright (C) 2004-2009 The Mana World Development Team
4  * Copyright (C) 2009-2010 The Mana Developers
5  * Copyright (C) 2011-2019 The ManaPlus Developers
6  * Copyright (C) 2019-2021 Andrei Karas
7  *
8  * This file is part of The ManaPlus Client.
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program. If not, see <http://www.gnu.org/licenses/>.
22  */
23 
24 #include "resources/sdlmusic.h"
25 
26 #include "fs/virtfs/rwops.h"
27 
29 
31 
32 #include "utils/checkutils.h"
33 #include "utils/sdlmusichelper.h"
34 
35 #include "debug.h"
36 
37 namespace
38 {
40  {
42 
43  const std::string path;
44 
45  static Resource *load(const void *const v)
46  {
47  if (v == nullptr)
48  return nullptr;
49  const ResourceLoader *const
50  rl = static_cast<const ResourceLoader *>(v);
51  SDL_RWops *const rw = VirtFs::rwopsOpenRead(rl->path);
52  if (rw == nullptr)
53  {
54  reportAlways("Error loading resource: %s",
55  rl->path.c_str())
56  return nullptr;
57  }
58  if (Mix_Music *const music = SDL::LoadMUSOgg_RW(rw))
59  {
60 #ifdef USE_SDL2
61  return new SDLMusic(music, nullptr, rl->path);
62 #else // USE_SDL2
63 
64  return new SDLMusic(music, rw, rl->path);
65 #endif // USE_SDL2
66  }
67 
68  logger->log("Error, failed to load music: %s", SDL_GetError());
69  return nullptr;
70  }
71  };
72 } // namespace
73 
74 SDLMusic *Loader::getMusic(const std::string &idPath)
75 {
76  ResourceLoader rl = { idPath };
77  return static_cast<SDLMusic*>(ResourceManager::get(
78  "music_" + idPath, ResourceLoader::load, &rl));
79 }
#define reportAlways(...)
Definition: checkutils.h:253
void log(const char *const log_text,...)
Definition: logger.cpp:269
#define final
Definition: localconsts.h:46
#define A_DEFAULT_COPY(func)
Definition: localconsts.h:41
Logger * logger
Definition: logger.cpp:89
void load()
Definition: avatardb.cpp:46
SDLMusic * getMusic(const std::string &idPath)
Definition: musicloader.cpp:74
Resource * get(const std::string &idPath, generator fun, const void *const data)
Mix_Music * LoadMUSOgg_RW(SDL_RWops *const rw)
SDL_RWops * rwopsOpenRead(const std::string &fname)
Definition: rwops.cpp:107