diff --git a/src/audio/soundcore.c b/src/audio/soundcore.c index 9df45cb1..042e97bf 100644 --- a/src/audio/soundcore.c +++ b/src/audio/soundcore.c @@ -134,3 +134,11 @@ void audio_shutdown(void) { audio_isAvailable = false; } +void audio_pause(void) { + audio_backend->pause(); +} + +void audio_resume(void) { + audio_backend->resume(); +} + diff --git a/src/audio/soundcore.h b/src/audio/soundcore.h index 9819cb7c..4e8392ba 100644 --- a/src/audio/soundcore.h +++ b/src/audio/soundcore.h @@ -59,24 +59,8 @@ typedef struct AudioBuffer_s { } AudioBuffer_s; -typedef struct AudioParams_s { - uint16_t nChannels; - unsigned long nSamplesPerSec; - unsigned long nAvgBytesPerSec; - uint16_t nBlockAlign; - uint16_t wBitsPerSample; - unsigned long dwBufferBytes; -} AudioParams_s; - -typedef struct AudioContext_s { - void *implementation_specific; - long (*CreateSoundBuffer)(const AudioParams_s *params, INOUT AudioBuffer_s **buffer, const struct AudioContext_s *sound_system); - long (*DestroySoundBuffer)(INOUT AudioBuffer_s **buffer); -} AudioContext_s; - long DSGetLock(AudioBuffer_s *bufferObj, unsigned long dwOffset, unsigned long dwBytes, INOUT int16_t **samplesBuf, INOUT unsigned long *samplesBufSz, INOUT int16_t **samplesBufAlt, INOUT unsigned long *samplesBufAltSz); - long DSGetSoundBuffer(INOUT AudioBuffer_s **pVoice, unsigned long dwFlags, unsigned long dwBufferSize, unsigned long nSampleRate, int nChannels); void DSReleaseSoundBuffer(INOUT AudioBuffer_s **pVoice); @@ -90,8 +74,39 @@ bool audio_init(void); */ void audio_shutdown(void); +/* + * Pause the audio subsystem. + */ +void audio_pause(void); + +/* + * Resume the audio subsystem. + */ +void audio_resume(void); + +/* + * Is the audio subsystem available? + */ extern bool audio_isAvailable; +// ---------------------------------------------------------------------------- +// Private audio backend APIs + +typedef struct AudioParams_s { + uint16_t nChannels; + unsigned long nSamplesPerSec; + unsigned long nAvgBytesPerSec; + uint16_t nBlockAlign; + uint16_t wBitsPerSample; + unsigned long dwBufferBytes; +} AudioParams_s; + +typedef struct AudioContext_s { + void *implementation_specific; + PRIVATE long (*CreateSoundBuffer)(const AudioParams_s *params, INOUT AudioBuffer_s **buffer, const struct AudioContext_s *sound_system); + PRIVATE long (*DestroySoundBuffer)(INOUT AudioBuffer_s **buffer); +} AudioContext_s; + typedef struct AudioBackend_s { // basic backend functionality controlled by soundcore @@ -99,14 +114,12 @@ typedef struct AudioBackend_s { PRIVATE long (*shutdown)(INOUT AudioContext_s **audio_context); PRIVATE long (*enumerateDevices)(INOUT char ***sound_devices, const int maxcount); - PUBLIC long (*pause)(void); - PUBLIC long (*resume)(void); + PRIVATE long (*pause)(void); + PRIVATE long (*resume)(void); } AudioBackend_s; -/* - * The registered audio backend (renderer). - */ -extern AudioBackend_s *audio_backend; +// Audio backend registered at CTOR time +PRIVATE extern AudioBackend_s *audio_backend; #endif /* whole file */ diff --git a/src/interface.c b/src/interface.c index 53ff05d7..b1eb4719 100644 --- a/src/interface.c +++ b/src/interface.c @@ -1549,7 +1549,7 @@ static void *interface_thread(void *current_key) { pthread_mutex_lock(&interface_mutex); #ifdef AUDIO_ENABLED - audio_backend->pause(); + audio_pause(); #endif in_interface = true; @@ -1593,7 +1593,7 @@ static void *interface_thread(void *current_key) } #ifdef AUDIO_ENABLED - audio_backend->resume(); + audio_resume(); #endif pthread_mutex_unlock(&interface_mutex); in_interface = false;