57 lines
1.5 KiB
C
57 lines
1.5 KiB
C
/* 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
|