aboutsummaryrefslogtreecommitdiffstats
path: root/build/4coder_byp/custom/4coder_audio.h
blob: 704144d75e458b8e2a4bb76e6c79d081e32fd1c8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/* date = November 23rd 2020 1:18 pm */

#ifndef FCODER_AUDIO_H
#define FCODER_AUDIO_H

////////////////////////////////
// NOTE(allen): Default Mixer Types

struct Audio_Control{
 volatile f32 channel_volume[2];
 volatile u32 generation;
 volatile u32 last_played_sample_index;
 volatile b32 loop;
 };

 struct Audio_Clip{
 i16 *samples;
 Audio_Control *control;
 f32 channel_volume[2];

 u32 sample_count;
 u32 at_sample_index;
 };

 struct Audio_System{
 volatile u32 quit;
 volatile u32 ticket;
 volatile u32 serving;
 volatile u32 generation;

 Audio_Clip playing_clips[64];

 // NOTE(casey): Requests to play sounds are written to a pending array to avoid long locking
 volatile u32 pending_clip_count;
 Audio_Clip pending_clips[64];
};

////////////////////////////////
// NOTE(allen): Default Mixer

function void def_audio_init(void);
function void def_audio_play_clip(Audio_Clip clip, Audio_Control *control);
function b32  def_audio_is_playing(Audio_Control *control);
function void def_audio_stop(Audio_Control *control);

function void def_audio_mix_sources(void *ctx, f32 *mix_buffer, u32 sample_count);
function void def_audio_mix_destination(i16 *dst, f32 *src, u32 sample_count);

////////////////////////////////
// NOTE(allen): Loading Clip

function Audio_Clip audio_clip_from_wav_data(String_Const_u8 data);
function Audio_Clip audio_clip_from_wav_FILE(Arena *arena, FILE *file);
function Audio_Clip audio_clip_from_wav_file_name(Arena *arena, char *file_name);

#endif //4CODER_AUDIO_H