1 /* 2 libSDL2pp - C++11 bindings/wrapper for SDL2 3 Copyright (C) 2015-2017 Dmitry Marakasov <amdmi3@amdmi3.ru> 4 5 This software is provided 'as-is', without any express or implied 6 warranty. In no event will the authors be held liable for any damages 7 arising from the use of this software. 8 9 Permission is granted to anyone to use this software for any purpose, 10 including commercial applications, and to alter it and redistribute it 11 freely, subject to the following restrictions: 12 13 1. The origin of this software must not be misrepresented; you must not 14 claim that you wrote the original software. If you use this software 15 in a product, an acknowledgment in the product documentation would be 16 appreciated but is not required. 17 2. Altered source versions must be plainly marked as such, and must not be 18 misrepresented as being the original software. 19 3. This notice may not be removed or altered from any source distribution. 20 */ 21 22 #ifndef SDL2PP_MUSIC_HH 23 #define SDL2PP_MUSIC_HH 24 25 #include <string> 26 27 #include <SDL_mixer.h> 28 29 #include <SDL2pp/Export.hh> 30 31 namespace SDL2pp { 32 33 class RWops; 34 35 //////////////////////////////////////////////////////////// 36 /// \brief %Music data 37 /// 38 /// \ingroup mixer 39 /// 40 /// \headerfile SDL2pp/Music.hh 41 /// 42 //////////////////////////////////////////////////////////// 43 class SDL2PP_EXPORT Music { 44 private: 45 Mix_Music* music_; ///< Managed Mix_Music object 46 47 public: 48 //////////////////////////////////////////////////////////// 49 /// \brief Construct from existing Mix_Music pointer 50 /// 51 /// \param[in] music Existing Mix_Music to manage 52 /// 53 //////////////////////////////////////////////////////////// 54 explicit Music(Mix_Music* music); 55 56 //////////////////////////////////////////////////////////// 57 /// \brief Load music file 58 /// 59 /// \param[in] file Name of music file to use 60 /// 61 /// \throws SDL2pp::Exception 62 /// 63 /// \see https://www.libsdl.org/projects/SDL_mixer/docs/SDL_mixer.html#SEC55 64 /// 65 //////////////////////////////////////////////////////////// 66 explicit Music(const std::string& file); 67 68 //////////////////////////////////////////////////////////// 69 /// \brief Load music using RWops 70 /// 71 /// This uses undocumented SDL_Mixer function. Comment 72 /// in SDL_mixer.h suggests it's only indended to work with 73 /// Ogg and MikMod. 74 /// 75 /// \param[in] rwops SDL2pp::RWops used to access music data 76 /// 77 /// \throws SDL2pp::Exception 78 /// 79 //////////////////////////////////////////////////////////// 80 explicit Music(RWops& rwops); 81 82 //////////////////////////////////////////////////////////// 83 /// \brief Load music using RWops 84 /// 85 /// This uses undocumented SDL_Mixer function. 86 /// 87 /// \param[in] rwops SDL2pp::RWops used to access music data 88 /// \param[in] type Music type to load 89 /// 90 /// \throws SDL2pp::Exception 91 /// 92 //////////////////////////////////////////////////////////// 93 Music(RWops& rwops, Mix_MusicType type); 94 95 //////////////////////////////////////////////////////////// 96 /// \brief Destructor 97 /// 98 /// \see https://www.libsdl.org/projects/SDL_mixer/docs/SDL_mixer.html#SEC56 99 /// 100 //////////////////////////////////////////////////////////// 101 ~Music(); 102 103 //////////////////////////////////////////////////////////// 104 /// \brief Move constructor 105 /// 106 /// \param[in] other SDL2pp::Music object to move data from 107 /// 108 //////////////////////////////////////////////////////////// 109 Music(Music&& other) noexcept; 110 111 //////////////////////////////////////////////////////////// 112 /// \brief Move assignment operator 113 /// 114 /// \param[in] other SDL2pp::Music object to move data from 115 /// 116 /// \returns Reference to self 117 /// 118 //////////////////////////////////////////////////////////// 119 Music& operator=(Music&& other) noexcept; 120 121 //////////////////////////////////////////////////////////// 122 /// \brief Deleted copy constructor 123 /// 124 /// This class is not copyable 125 /// 126 //////////////////////////////////////////////////////////// 127 Music(const Music& other) = delete; 128 129 //////////////////////////////////////////////////////////// 130 /// \brief Deleted assignment operator 131 /// 132 /// This class is not copyable 133 /// 134 //////////////////////////////////////////////////////////// 135 Music& operator=(const Music& other) = delete; 136 137 //////////////////////////////////////////////////////////// 138 /// \brief Get pointer to managed Mix_Music 139 /// 140 /// \returns Pointer to managed Mix_Music 141 /// 142 //////////////////////////////////////////////////////////// 143 Mix_Music* Get() const; 144 145 //////////////////////////////////////////////////////////// 146 /// \brief Get the music encoding type 147 /// 148 /// \returns The type of music 149 /// 150 //////////////////////////////////////////////////////////// 151 Mix_MusicType GetType() const; 152 }; 153 154 } 155 156 #endif 157