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_