Mercurial > repos > blastem
comparison render_audio.h @ 1865:4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 17 May 2019 08:43:30 -0700 |
parents | |
children | cfd53c94fffb |
comparison
equal
deleted
inserted
replaced
1863:d60f2d7c02a5 | 1865:4c322abd9fa5 |
---|---|
1 #ifndef RENDER_AUDIO_H_ | |
2 #define RENDER_AUDIO_H_ | |
3 | |
4 #include <stdint.h> | |
5 typedef enum { | |
6 RENDER_AUDIO_S16, | |
7 RENDER_AUDIO_FLOAT, | |
8 RENDER_AUDIO_UNKNOWN | |
9 } render_audio_format; | |
10 | |
11 typedef struct { | |
12 void *opaque; | |
13 int16_t *front; | |
14 int16_t *back; | |
15 double dt; | |
16 uint64_t buffer_fraction; | |
17 uint64_t buffer_inc; | |
18 float gain_mult; | |
19 uint32_t buffer_pos; | |
20 uint32_t read_start; | |
21 uint32_t read_end; | |
22 uint32_t lowpass_alpha; | |
23 uint32_t mask; | |
24 int16_t last_left; | |
25 int16_t last_right; | |
26 uint8_t num_channels; | |
27 uint8_t front_populated; | |
28 } audio_source; | |
29 | |
30 //public interface | |
31 audio_source *render_audio_source(uint64_t master_clock, uint64_t sample_divider, uint8_t channels); | |
32 void render_audio_source_gaindb(audio_source *src, float gain); | |
33 void render_audio_adjust_clock(audio_source *src, uint64_t master_clock, uint64_t sample_divider); | |
34 void render_put_mono_sample(audio_source *src, int16_t value); | |
35 void render_put_stereo_sample(audio_source *src, int16_t left, int16_t right); | |
36 void render_pause_source(audio_source *src); | |
37 void render_resume_source(audio_source *src); | |
38 void render_free_source(audio_source *src); | |
39 //interface for render backends | |
40 void render_audio_initialized(render_audio_format format, uint32_t rate, uint8_t channels, uint32_t buffer_size, int sample_size); | |
41 int mix_and_convert(unsigned char *byte_stream, int len, int *min_remaining_out); | |
42 uint8_t all_sources_ready(void); | |
43 void render_audio_adjust_speed(float adjust_ratio); | |
44 //to be implemented by render backend | |
45 uint8_t render_is_audio_sync(void); | |
46 void render_buffer_consumed(audio_source *src); | |
47 void *render_new_audio_opaque(void); | |
48 void render_free_audio_opaque(void *opaque); | |
49 void render_lock_audio(void); | |
50 void render_unlock_audio(void); | |
51 uint32_t render_min_buffered(void); | |
52 uint32_t render_audio_syncs_per_sec(void); | |
53 void render_audio_created(audio_source *src); | |
54 void render_do_audio_ready(audio_source *src); | |
55 void render_source_paused(audio_source *src, uint8_t remaining_sources); | |
56 void render_source_resumed(audio_source *src); | |
57 #endif //RENDER_AUDIO_H_ |