dungeon_crawler
view 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 |
line source
1 #ifndef AUDIO_STREAM_H_
2 #define AUDIO_STREAM_H_
4 #include <thread>
5 #include <mutex>
7 #define AUDIO_BUFFER_MSEC 1000
8 #define AUDIO_BUFFER_SAMPLES (AUDIO_BUFFER_MSEC * 44100 / 1000)
9 #define AUDIO_BUFFER_BYTES (AUDIO_BUFFER_SAMPLES * 2 * 2)
11 struct AudioStreamBuffer {
12 char samples[AUDIO_BUFFER_BYTES];
13 int num_samples;
14 int channels;
15 int sample_rate;
16 };
18 enum class PlayMode { once, loop };
20 class AudioStream {
21 private:
22 std::thread play_thread;
23 std::mutex mutex;
25 bool done, loop;
26 unsigned int poll_interval;
27 unsigned int alsrc;
29 virtual bool more_samples(AudioStreamBuffer *buf) = 0;
31 void poll_loop();
33 public:
34 AudioStream();
35 virtual ~AudioStream();
37 void play(enum PlayMode mode);
38 void stop();
40 virtual void rewind() = 0;
41 };
43 #endif // AUDIO_STREAM_H_