Extra2D/include/resource/audio.h

97 lines
1.9 KiB
C
Raw Normal View History

#pragma once
#include <resource/resource.h>
#include <SDL2/SDL_mixer.h>
#include <string>
namespace extra2d {
/**
* @brief
*/
enum class AudioType : uint8 {
Sound, // 音效(短音频,完全加载到内存)
Music // 音乐(流式播放)
};
/**
* @brief
*
* SDL2_mixer
*/
class Audio : public Resource {
public:
Audio();
~Audio() override;
/**
* @brief
*/
ResourceType getType() const override { return ResourceType::Audio; }
/**
* @brief
* @param path
* @param type
* @return
*/
bool loadFromFile(const std::string& path, AudioType type);
/**
* @brief
* @param loops -1 0
*/
void play(int loops = 0);
/**
* @brief
*/
void pause();
/**
* @brief
*/
void resume();
/**
* @brief
*/
void stop();
/**
* @brief
* @param volume 0.0 - 1.0
*/
void setVolume(float volume);
/**
* @brief
* @return 0.0 - 1.0
*/
float getVolume() const;
/**
* @brief
*/
bool isPlaying() const;
/**
* @brief
*/
bool isPaused() const;
/**
* @brief
*/
AudioType getAudioType() const { return type_; }
private:
AudioType type_ = AudioType::Sound; // 音频类型
Mix_Chunk* chunk_ = nullptr; // 音效数据
Mix_Music* music_ = nullptr; // 音乐数据
int channel_ = -1; // 音效通道
float volume_ = 1.0f; // 音量
};
} // namespace extra2d