diff options
author | Vito Caputo <vcaputo@pengaru.com> | 2023-08-28 18:57:55 -0700 |
---|---|---|
committer | Vito Caputo <vcaputo@pengaru.com> | 2023-11-14 01:20:48 -0800 |
commit | b22df31feeb7e695faabecfd7cc6fdd24609b0e1 (patch) | |
tree | b1c33983aec45ba17de58276d2c3696695e573dd /src/til_audio.h | |
parent | 8245857f9f07043039affd7b92a740e002b1b81b (diff) |
til: add preliminary audio backend
This is an early implementation of something resembling an audio
backend for rototiller/libtil.
The assumption for now is that everything will use signed 16-bit
native-endian stereo output @ 44.1khz.
Diffstat (limited to 'src/til_audio.h')
-rw-r--r-- | src/til_audio.h | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/til_audio.h b/src/til_audio.h new file mode 100644 index 0000000..f5640b6 --- /dev/null +++ b/src/til_audio.h @@ -0,0 +1,39 @@ +#ifndef _TIL_AUDIO_H +#define _TIL_AUDIO_H + +#include <stdint.h> + +typedef struct til_settings_t til_settings_t; +typedef struct til_setting_t til_setting_t; +typedef struct til_setting_desc_t til_setting_desc_t; +typedef struct til_setup_t til_setup_t; +typedef struct til_audio_context_t til_audio_context_t; + +typedef struct til_audio_ops_t { + int (*setup)(const til_settings_t *settings, til_setting_t **res_setting, const til_setting_desc_t **res_desc, til_setup_t **res_setup); + int (*init)(til_setup_t *setup, til_audio_context_t **res_audio_context); + void (*shutdown)(til_audio_context_t *audio_context); + void (*drop)(til_audio_context_t *audio_context); + void (*pause)(til_audio_context_t *audio_context); + void (*unpause)(til_audio_context_t *audio_context); + int (*queue)(til_audio_context_t *audio_context, int16_t *frames, int n_frames); + unsigned (*n_queued)(til_audio_context_t *audio_context); +} til_audio_ops_t; + +typedef struct til_audio_hooks_t { + void (*seeked)(void *hooks_context, const til_audio_context_t *audio_context, unsigned ticks); + void (*paused)(void *hooks_context, const til_audio_context_t *audio_context); + void (*unpaused)(void *hooks_context, const til_audio_context_t *audio_context); +} til_audio_hooks_t; + +int til_audio_open(const til_audio_ops_t *ops, til_setup_t *setup, til_audio_context_t **res_audio_context); +void til_audio_shutdown(til_audio_context_t *audio_context); +int til_audio_set_hooks(til_audio_context_t *audio_context, til_audio_hooks_t *hooks, void *hooks_context); +int til_audio_unset_hooks(til_audio_context_t *audio_context, til_audio_hooks_t *hooks, void *hooks_context); +int til_audio_queue(til_audio_context_t *audio_context, int16_t *frames, int n_frames); +unsigned til_audio_n_queued(til_audio_context_t *audio_context); +void til_audio_seek(til_audio_context_t *audio_context, unsigned ticks); +void til_audio_pause(til_audio_context_t *audio_context); +void til_audio_unpause(til_audio_context_t *audio_context); + +#endif |