#ifndef _H_AUDIO_STREAM_H #define _H_AUDIO_STREAM_H #define STB_VORBIS_HEADER_ONLY #include "thirdparty/stb_vorbis.c" #include "utility/logger.h" #include #include #include #include #include #include namespace AUDIO { constexpr size_t CHUNK_SIZE = 4096; constexpr int SAMPLE_RATE = 44100; } class AudioStream { public: AudioStream(); bool PlayStream(); void AddToQueue(std::string songName); void PauseStream() { paused = !paused; } void kill() { stopThread = true; } ~AudioStream(); private: std::queue songNames; std::mutex mutex; std::atomic stopThread; std::atomic paused; std::string CurStreamName(); bool eof; std::thread streamThread; int loadInitalChunk(); int loadNextChunk(); int loadChunk(ALuint buffer); void popQueue(); void cycleQueue(); bool openFile(std::string fileName); void stream(); short *data; stb_vorbis *file; stb_vorbis_info info; ALuint buffers[4]; ALuint source; ALint state; ALint format; size_t last_buffer; }; #endif // _H_AUDIO_STREAM_H