summaryrefslogtreecommitdiffstats
path: root/gearboy/platforms/audio-shared/Sound_Queue.h
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2022-06-02 15:28:40 +0200
committerLouis Burda <quent.burda@gmail.com>2022-06-02 15:28:40 +0200
commit5bc16063c29aa4d3d287ebd163ccdbcbf54c4f9f (patch)
treec131f947a37b3af2d14d41e9eda098bdec2d061c /gearboy/platforms/audio-shared/Sound_Queue.h
parent78a5f810b22f0d8cafa05f638b0cb2e889824859 (diff)
downloadcscg2022-gearboy-master.tar.gz
cscg2022-gearboy-master.zip
Added submodule filesHEADmaster
Diffstat (limited to 'gearboy/platforms/audio-shared/Sound_Queue.h')
-rw-r--r--gearboy/platforms/audio-shared/Sound_Queue.h51
1 files changed, 51 insertions, 0 deletions
diff --git a/gearboy/platforms/audio-shared/Sound_Queue.h b/gearboy/platforms/audio-shared/Sound_Queue.h
new file mode 100644
index 00000000..d7c4230a
--- /dev/null
+++ b/gearboy/platforms/audio-shared/Sound_Queue.h
@@ -0,0 +1,51 @@
+
+// Simple sound queue for synchronous sound handling in SDL
+
+// Copyright (C) 2005 Shay Green. MIT license.
+
+#ifndef SOUND_QUEUE_H
+#define SOUND_QUEUE_H
+
+#include <SDL.h>
+
+// Simple SDL sound wrapper that has a synchronous interface
+class Sound_Queue {
+public:
+ Sound_Queue();
+ ~Sound_Queue();
+
+ // Initialize with specified sample rate and channel count.
+ // Returns NULL on success, otherwise error string.
+ const char* start( long sample_rate, int chan_count = 1 );
+
+ // Number of samples in buffer waiting to be played
+ int sample_count() const;
+
+ // Write samples to buffer and block until enough space is available
+ typedef short sample_t;
+ void write( const sample_t*, int count, bool sync = true );
+
+ // Pointer to samples currently playing (for showing waveform display)
+ sample_t const* currently_playing() const { return currently_playing_; }
+
+ // Stop audio output
+ void stop();
+
+private:
+ enum { buf_size = 2048 };
+ enum { buf_count = 3 };
+ sample_t* volatile bufs;
+ SDL_sem* volatile free_sem;
+ sample_t* volatile currently_playing_;
+ int volatile read_buf;
+ int write_buf;
+ int write_pos;
+ bool sound_open;
+ bool sync_output;
+
+ sample_t* buf( int index );
+ void fill_buffer( Uint8*, int );
+ static void fill_buffer_( void*, Uint8*, int );
+};
+
+#endif