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_