dungeon_crawler

annotate prototype/src/audio/stream.h @ 69:45172d087ebe

fixed some windows compatibility crap fixed a terrible stack overrun in psys (TODO: remember to fix in libpsys too)
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 07 Oct 2012 03:42:44 +0200
parents f9b8bbebc9b3
children
rev   line source
nuclear@53 1 #ifndef AUDIO_STREAM_H_
nuclear@53 2 #define AUDIO_STREAM_H_
nuclear@53 3
nuclear@53 4 #include <thread>
nuclear@55 5 #include <mutex>
nuclear@55 6
nuclear@55 7 #define AUDIO_BUFFER_MSEC 1000
nuclear@55 8 #define AUDIO_BUFFER_SAMPLES (AUDIO_BUFFER_MSEC * 44100 / 1000)
nuclear@55 9 #define AUDIO_BUFFER_BYTES (AUDIO_BUFFER_SAMPLES * 2 * 2)
nuclear@53 10
nuclear@54 11 struct AudioStreamBuffer {
nuclear@55 12 char samples[AUDIO_BUFFER_BYTES];
nuclear@54 13 int num_samples;
nuclear@54 14 int channels;
nuclear@54 15 int sample_rate;
nuclear@54 16 };
nuclear@54 17
nuclear@55 18 enum class PlayMode { once, loop };
nuclear@55 19
nuclear@53 20 class AudioStream {
nuclear@53 21 private:
nuclear@53 22 std::thread play_thread;
nuclear@55 23 std::mutex mutex;
nuclear@55 24
nuclear@56 25 float volume;
nuclear@54 26 bool done, loop;
nuclear@54 27 unsigned int poll_interval;
nuclear@54 28 unsigned int alsrc;
nuclear@53 29
nuclear@54 30 virtual bool more_samples(AudioStreamBuffer *buf) = 0;
nuclear@54 31
nuclear@54 32 void poll_loop();
nuclear@53 33
nuclear@53 34 public:
nuclear@54 35 AudioStream();
nuclear@53 36 virtual ~AudioStream();
nuclear@53 37
nuclear@56 38 void set_volume(float vol);
nuclear@56 39 float get_volume() const;
nuclear@56 40
nuclear@69 41 void play(PlayMode mode);
nuclear@53 42 void stop();
nuclear@54 43
nuclear@54 44 virtual void rewind() = 0;
nuclear@53 45 };
nuclear@53 46
nuclear@53 47 #endif // AUDIO_STREAM_H_