dungeon_crawler
annotate prototype/src/audio/stream.h @ 55:4c427e28ca00
music playback bugfixing
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Wed, 19 Sep 2012 08:19:10 +0300 |
parents | 995191474cc0 |
children | f9b8bbebc9b3 |
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@54 | 25 bool done, loop; |
nuclear@54 | 26 unsigned int poll_interval; |
nuclear@54 | 27 unsigned int alsrc; |
nuclear@53 | 28 |
nuclear@54 | 29 virtual bool more_samples(AudioStreamBuffer *buf) = 0; |
nuclear@54 | 30 |
nuclear@54 | 31 void poll_loop(); |
nuclear@53 | 32 |
nuclear@53 | 33 public: |
nuclear@54 | 34 AudioStream(); |
nuclear@53 | 35 virtual ~AudioStream(); |
nuclear@53 | 36 |
nuclear@55 | 37 void play(enum PlayMode mode); |
nuclear@53 | 38 void stop(); |
nuclear@54 | 39 |
nuclear@54 | 40 virtual void rewind() = 0; |
nuclear@53 | 41 }; |
nuclear@53 | 42 |
nuclear@53 | 43 #endif // AUDIO_STREAM_H_ |