mirror of
https://github.com/libretro/Gearboy.git
synced 2026-11-09 20:01:24 -10:00
51 lines
1.2 KiB
C++
51 lines
1.2 KiB
C++
|
|
// 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 <SDL2/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 );
|
|
|
|
// 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;
|
|
|
|
sample_t* buf( int index );
|
|
void fill_buffer( Uint8*, int );
|
|
static void fill_buffer_( void*, Uint8*, int );
|
|
};
|
|
|
|
#endif
|