diff options
author | fschildt <florian.schildt@protonmail.com> | 2025-08-22 15:23:11 +0200 |
---|---|---|
committer | fschildt <florian.schildt@protonmail.com> | 2025-08-22 15:23:11 +0200 |
commit | 2050c0e0576f05156f192aa4caf48834d2f28b14 (patch) | |
tree | ee58bd35b0df0a1bacfbc9700ed99ce80c99294e /src/client/sound.c |
Diffstat (limited to 'src/client/sound.c')
-rw-r--r-- | src/client/sound.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/client/sound.c b/src/client/sound.c new file mode 100644 index 0000000..965f5b1 --- /dev/null +++ b/src/client/sound.c @@ -0,0 +1,52 @@ +#include <client/sound.h> +#include <client/generated/asset_sound_user_connected.c> +#include <client/generated/asset_sound_user_disconnected.c> + + +void +play_sound_update(PlaySound *ps, OSSoundBuffer *dest) +{ + if (!dest) { + return; + } + + i32 samples_readable = ps->sound->sample_count - ps->play_cursor; + i32 samples_writable = dest->sample_count; + i32 samples_to_play; + if (samples_readable > samples_writable) { + samples_to_play = samples_writable; + } else { + samples_to_play = samples_readable; + } + + i16 *from = &ps->sound->samples[ps->play_cursor]; + i16 *to = dest->samples; + for (i32 i = 0; i < samples_to_play; i++) { + to[i] = from[i]; + } + + ps->play_cursor += samples_to_play; +} + + +void +play_sound_init(PlaySound *ps, Sound *sound) +{ + ps->play_cursor = 0; + ps->sound = sound; +} + +Sound * +sound_load(SoundId id) +{ + if (id == 0) { + Sound *sound = (Sound*)(g_asset_sound_user_connected); + sound->samples = (i16*)(sound + 1); + return sound; + } else { + Sound *sound = (Sound*)(g_asset_sound_user_disconnected); + sound->samples = (i16*)(sound + 1); + return sound; + } +} + |