dungeon_crawler

view prototype/src/audio/stream.h @ 56:f9b8bbebc9b3

fixed the music playback
author John Tsiombikas <nuclear@member.fsf.org>
date Thu, 20 Sep 2012 10:04:25 +0300
parents 4c427e28ca00
children 45172d087ebe
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 float volume;
26 bool done, loop;
27 unsigned int poll_interval;
28 unsigned int alsrc;
30 virtual bool more_samples(AudioStreamBuffer *buf) = 0;
32 void poll_loop();
34 public:
35 AudioStream();
36 virtual ~AudioStream();
38 void set_volume(float vol);
39 float get_volume() const;
41 void play(enum PlayMode mode);
42 void stop();
44 virtual void rewind() = 0;
45 };
47 #endif // AUDIO_STREAM_H_