#pragma once #include #include #include #include namespace frostbite2D { /** * @brief 音乐类 * * 用于加载和播放长音频文件(背景音乐),支持从文件或内存加载。 * 支持 WAV、OGG、MP3 等格式。 */ class Music : public RefObject { public: static Ptr loadFromPath(const std::string& path); static Ptr loadFromFile(const std::string& path); static Ptr loadFromMemory(const uint8* data, size_t size); static Ptr loadFromNpk(const std::string& audioPath); static bool isPathPlaying(const std::string& path); static std::string getCurrentPlayingPath(); ~Music(); bool play(int loops = -1); bool fadeIn(int ms, int loops = -1); void pause(); void resume(); void stop(); bool fadeOut(int ms); void setVolume(float volume); float getVolume() const; bool isPlaying() const; bool isPaused() const; const std::string& getPath() const { return path_; } private: Music(Mix_Music* music, const std::string& path = ""); Music(Mix_Music* music, std::vector data, const std::string& path = ""); Mix_Music* music_ = nullptr; std::string path_; std::vector data_; float volume_ = 1.0f; }; }