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_ |