Kohi Game Engine
audio_types.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <math/math_types.h>
4 #include <platform/filesystem.h>
5 
6 #include "defines.h"
7 
8 struct audio_plugin_state;
9 struct frame_data;
10 
11 struct audio_file_internal;
12 struct audio_file_plugin_data;
13 struct resource;
14 
15 typedef enum audio_file_type {
19 
20 typedef struct audio_file {
21  // The type of audio file.
24  // The format (i.e. 16 bit stereo)
26  // The number of channels (i.e. 1 for mono or 2 for stereo)
28  // The sample rate of the sound/music (i.e. 44100)
30  // Used to track samples in streaming type files.
32  struct audio_file_internal* internal_data;
33  struct audio_file_plugin_data* plugin_data;
34 
35  u64 (*load_samples)(struct audio_file* audio, u32 chunk_size, i32 count);
36  void* (*stream_buffer_data)(struct audio_file* audio);
37  void (*rewind)(struct audio_file* audio);
38 
40 
41 typedef struct audio_emitter {
46  struct audio_file* file;
49 
50 typedef struct audio_plugin_config {
62 
68 
69 typedef struct audio_plugin {
70  struct audio_plugin_state* internal_state;
71 
72  b8 (*initialize)(struct audio_plugin* plugin, audio_plugin_config config);
73 
74  void (*shutdown)(struct audio_plugin* plugin);
75 
76  b8 (*update)(struct audio_plugin* plugin, struct frame_data* p_frame_data);
77 
78  b8 (*listener_position_query)(struct audio_plugin* plugin, vec3* out_position);
79  b8 (*listener_position_set)(struct audio_plugin* plugin, vec3 position);
80 
81  b8 (*listener_orientation_query)(struct audio_plugin* plugin, vec3* out_forward, vec3* out_up);
82  b8 (*listener_orientation_set)(struct audio_plugin* plugin, vec3 forward, vec3 up);
83 
84  b8 (*source_gain_query)(struct audio_plugin* plugin, u32 source_id, f32* out_gain);
95  b8 (*source_gain_set)(struct audio_plugin* plugin, u32 source_id, f32 gain);
96 
97  b8 (*source_pitch_query)(struct audio_plugin* plugin, u32 source_id, f32* out_pitch);
98 
105  b8 (*source_pitch_set)(struct audio_plugin* plugin, u32 source_id, f32 pitch);
106 
107  b8 (*source_position_query)(struct audio_plugin* plugin, u32 source_id, vec3* out_position);
108  b8 (*source_position_set)(struct audio_plugin* plugin, u32 source_id, vec3 position);
109 
110  b8 (*source_looping_query)(struct audio_plugin* plugin, u32 source_id, b8* out_looping);
111  b8 (*source_looping_set)(struct audio_plugin* plugin, u32 source_id, b8 looping);
112 
113  struct audio_file* (*chunk_load)(struct audio_plugin* plugin, const char* name);
114  struct audio_file* (*stream_load)(struct audio_plugin* plugin, const char* name);
115  void (*audio_unload)(struct audio_plugin* plugin, struct audio_file* file);
116 
117  b8 (*source_play)(struct audio_plugin* plugin, i8 source_index);
118  b8 (*play_on_source)(struct audio_plugin* plugin, struct audio_file* file, i8 source_index);
119 
120  b8 (*source_stop)(struct audio_plugin* plugin, i8 source_index);
121  b8 (*source_pause)(struct audio_plugin* plugin, i8 source_index);
122  b8 (*source_resume)(struct audio_plugin* plugin, i8 source_index);
123 
struct audio_plugin audio_plugin
struct audio_emitter audio_emitter
audio_file_type
Definition: audio_types.h:15
@ AUDIO_FILE_TYPE_SOUND_EFFECT
Definition: audio_types.h:16
@ AUDIO_FILE_TYPE_MUSIC_STREAM
Definition: audio_types.h:17
struct audio_file audio_file
struct audio_plugin_config audio_plugin_config
This file contains global type definitions which are used throughout the entire engine and applicatio...
unsigned int u32
Unsigned 32-bit integer.
Definition: defines.h:25
signed char i8
Signed 8-bit integer.
Definition: defines.h:33
_Bool b8
8-bit boolean type
Definition: defines.h:58
float f32
32-bit floating point number
Definition: defines.h:47
signed int i32
Signed 32-bit integer.
Definition: defines.h:39
unsigned long long u64
Unsigned 64-bit integer.
Definition: defines.h:28
This file contains structures and functions for interacting with the file system.
Contains various math types required for the engine.
Definition: audio_types.h:41
f32 volume
Definition: audio_types.h:43
b8 looping
Definition: audio_types.h:45
vec3 position
Definition: audio_types.h:42
struct audio_file * file
Definition: audio_types.h:46
u32 source_id
Definition: audio_types.h:47
f32 falloff
Definition: audio_types.h:44
Definition: audio_types.h:20
i32 channels
Definition: audio_types.h:27
u64(* load_samples)(struct audio_file *audio, u32 chunk_size, i32 count)
Definition: audio_types.h:35
struct audio_file_plugin_data * plugin_data
Definition: audio_types.h:33
u32 total_samples_left
Definition: audio_types.h:31
struct audio_file_internal * internal_data
Definition: audio_types.h:32
audio_file_type type
Definition: audio_types.h:22
u32 format
Definition: audio_types.h:25
u32 sample_rate
Definition: audio_types.h:29
void(* rewind)(struct audio_file *audio)
Definition: audio_types.h:37
struct resource * audio_resource
Definition: audio_types.h:23
Definition: audio_types.h:50
u32 channel_count
The number of audio channels to support (i.e. 2 for stereo, 1 for mono). not to be confused with audi...
Definition: audio_types.h:61
u32 chunk_size
Definition: audio_types.h:66
u32 frequency
The frequency to output audio at.
Definition: audio_types.h:56
u32 max_sources
The maximum number of sources available. Default: 8.
Definition: audio_types.h:54
u32 max_buffers
The maximum number of buffers available. Default: 256.
Definition: audio_types.h:52
Definition: audio_types.h:69
b8(* source_pause)(struct audio_plugin *plugin, i8 source_index)
Definition: audio_types.h:121
b8(* source_play)(struct audio_plugin *plugin, i8 source_index)
Definition: audio_types.h:117
b8(* source_position_set)(struct audio_plugin *plugin, u32 source_id, vec3 position)
Definition: audio_types.h:108
b8(* source_pitch_set)(struct audio_plugin *plugin, u32 source_id, f32 pitch)
Definition: audio_types.h:105
b8(* source_stop)(struct audio_plugin *plugin, i8 source_index)
Definition: audio_types.h:120
void(* shutdown)(struct audio_plugin *plugin)
Definition: audio_types.h:74
b8(* listener_orientation_set)(struct audio_plugin *plugin, vec3 forward, vec3 up)
Definition: audio_types.h:82
b8(* source_gain_set)(struct audio_plugin *plugin, u32 source_id, f32 gain)
Definition: audio_types.h:95
void(* audio_unload)(struct audio_plugin *plugin, struct audio_file *file)
Definition: audio_types.h:115
b8(* update)(struct audio_plugin *plugin, struct frame_data *p_frame_data)
Definition: audio_types.h:76
b8(* initialize)(struct audio_plugin *plugin, audio_plugin_config config)
Definition: audio_types.h:72
b8(* play_on_source)(struct audio_plugin *plugin, struct audio_file *file, i8 source_index)
Definition: audio_types.h:118
b8(* source_looping_query)(struct audio_plugin *plugin, u32 source_id, b8 *out_looping)
Definition: audio_types.h:110
b8(* listener_orientation_query)(struct audio_plugin *plugin, vec3 *out_forward, vec3 *out_up)
Definition: audio_types.h:81
b8(* source_pitch_query)(struct audio_plugin *plugin, u32 source_id, f32 *out_pitch)
Definition: audio_types.h:97
b8(* source_gain_query)(struct audio_plugin *plugin, u32 source_id, f32 *out_gain)
Definition: audio_types.h:84
b8(* source_position_query)(struct audio_plugin *plugin, u32 source_id, vec3 *out_position)
Definition: audio_types.h:107
b8(* source_looping_set)(struct audio_plugin *plugin, u32 source_id, b8 looping)
Definition: audio_types.h:111
b8(* listener_position_query)(struct audio_plugin *plugin, vec3 *out_position)
Definition: audio_types.h:78
b8(* source_resume)(struct audio_plugin *plugin, i8 source_index)
Definition: audio_types.h:122
struct audio_plugin_state * internal_state
Definition: audio_types.h:70
b8(* listener_position_set)(struct audio_plugin *plugin, vec3 position)
Definition: audio_types.h:79
Engine-level current frame-specific data.
Definition: frame_data.h:16
A generic structure for a resource. All resource loaders load data into these.
Definition: resource_types.h:67
A 3-element vector.
Definition: math_types.h:49