18 #ifndef INC_C4MusicFile
19 #define INC_C4MusicFile
41 virtual bool Init(
const char *strFile);
42 virtual bool Play(
bool loop =
false,
double max_resume_time = 0.0) = 0;
43 virtual void Stop(
int fadeout_ms = 0) = 0;
46 virtual bool HasCategory(
const char *szcat)
const {
return false; }
69 #if AUDIO_TK == AUDIO_TK_SDL_MIXER
76 bool Play(
bool loop =
false,
double max_resume_time = 0.0)
override;
77 void Stop(
int fadeout_ms = 0)
override;
85 #elif AUDIO_TK == AUDIO_TK_OPENAL
91 ~C4MusicFileOgg()
override;
93 bool Init(
const char *strFile)
override;
94 bool Play(
bool loop =
false,
double max_resume_time = 0.0)
override;
95 void Stop(
int fadeout_ms = 0)
override;
100 bool HasResumePos()
const override {
return (last_playback_pos_sec > 0); }
105 enum { num_buffers = 4, buffer_size = 160*1024 };
108 OggVorbis_File ogg_file;
109 bool is_loading_from_file{
false};
111 long last_source_file_pos{0};
112 bool playing{
false}, streaming_done{
false}, loaded{
false};
113 ALuint buffers[num_buffers];
115 double last_playback_pos_sec{0};
117 int current_section{0};
118 size_t byte_pos_total{0};
120 std::vector<StdCopyStrBuf> categories;
122 bool FillBuffer(
size_t idx);
124 void UnprepareSourceFileReading();
125 bool PrepareSourceFileReading();
struct _Mix_Music Mix_Music
char FileName[_MAX_FNAME_LEN]
virtual void SetVolume(int)=0
virtual C4TimeMilliseconds GetLastInterruptionTime() const
virtual double GetRemainingTime()
virtual void ClearResumePos()
virtual StdStrBuf GetDebugInfo() const
virtual bool Init(const char *strFile)
virtual void CheckIfPlaying()=0
virtual bool Play(bool loop=false, double max_resume_time=0.0)=0
virtual bool HasCategory(const char *szcat) const
virtual ~C4MusicFile()=default
virtual bool HasResumePos() const
virtual void Stop(int fadeout_ms=0)=0
bool HasBeenAnnounced() const
bool Play(bool loop=false, double max_resume_time=0.0) override
~C4MusicFileSDL() override
void CheckIfPlaying() override
void SetVolume(int) override
void Stop(int fadeout_ms=0) override