diff options
| author | 2024-11-12 12:12:31 -0500 | |
|---|---|---|
| committer | 2024-11-12 12:12:31 -0500 | |
| commit | 29fa4f8d667d543595e652e7402d395d507ba464 (patch) | |
| tree | eaa2adf9f687c499b31eeddef42493c4bfda9b1c /src/mixer | |
| parent | b4bcfa1da5c1be9f7999d4d4df4e8d1b73c3061a (diff) | |
| download | camu-29fa4f8d667d543595e652e7402d395d507ba464.tar.gz camu-29fa4f8d667d543595e652e7402d395d507ba464.tar.bz2 camu-29fa4f8d667d543595e652e7402d395d507ba464.zip | |
Add user volume, simple client add cli
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/mixer')
| -rw-r--r-- | src/mixer/audio_miniaudio.c | 4 | ||||
| -rw-r--r-- | src/mixer/mixer.c | 36 | ||||
| -rw-r--r-- | src/mixer/mixer.h | 3 |
3 files changed, 41 insertions, 2 deletions
diff --git a/src/mixer/audio_miniaudio.c b/src/mixer/audio_miniaudio.c index 2a93491..7db1b5a 100644 --- a/src/mixer/audio_miniaudio.c +++ b/src/mixer/audio_miniaudio.c @@ -158,9 +158,9 @@ static bool audio_miniaudio_configure_stream(struct camu_audio *audio, void *opa ma->config.performanceProfile = ma_performance_profile_conservative; ma->config.periods = DEFAULT_PERIODS; ma->config.periodSizeInMilliseconds = DEFAULT_PERIOD_SIZE_IN_MILLISECONDS; - ma->config.playback.format = ma_format_s32; + ma->config.playback.format = ma_format_unknown; ma->config.playback.channels = 2; - ma->config.sampleRate = 44100; + ma->config.sampleRate = 0; ma->config.dataCallback = data_callback; ma->config.pUserData = ma; ma->config.noPreSilencedOutputBuffer = MA_TRUE; diff --git a/src/mixer/mixer.c b/src/mixer/mixer.c index 5af63b7..7608efc 100644 --- a/src/mixer/mixer.c +++ b/src/mixer/mixer.c @@ -68,6 +68,7 @@ bool camu_mixer_init(struct camu_mixer *mixer, struct camu_audio *audio) mixer->audio->data_callback = data_callback; mixer->audio->userdata = mixer; mixer->audio->init(mixer->audio, al_str_c("cmv")); + mixer->volume = 1.f; mixer->paused = true; mixer->empty_after = 0; al_array_init(mixer->buffers); @@ -85,6 +86,40 @@ void camu_mixer_pick_format(struct camu_mixer *mixer, struct camu_resampler_form mixer->audio->pick_format(mixer->audio, fmt); } +void camu_mixer_set_volume(struct camu_mixer *mixer, f32 volume) +{ +#ifdef CAMU_MIXER_THREADED + aki_mutex_lock(&mixer->mutex); +#endif + mixer->volume = volume; + struct camu_audio_buffer *buf; + al_array_foreach(mixer->buffers, i, buf) { + camu_audio_buffer_set_volume(buf, mixer->volume); + } +#ifdef CAMU_MIXER_THREADED + aki_mutex_unlock(&mixer->mutex); +#endif +} + +void camu_mixer_offset_volume(struct camu_mixer *mixer, f32 amount) +{ +#ifdef CAMU_MIXER_THREADED + aki_mutex_lock(&mixer->mutex); +#endif + if (FLT_MAX - mixer->volume < amount) { + mixer->volume = FLT_MAX; + } else { + mixer->volume = AL_MAX(0.f, mixer->volume + amount); + } + struct camu_audio_buffer *buf; + al_array_foreach(mixer->buffers, i, buf) { + camu_audio_buffer_set_volume(buf, mixer->volume); + } +#ifdef CAMU_MIXER_THREADED + aki_mutex_unlock(&mixer->mutex); +#endif +} + f64 camu_mixer_get_latency(struct camu_mixer *mixer) { return mixer->audio->get_latency(mixer->audio) / 1000000.0; @@ -92,6 +127,7 @@ f64 camu_mixer_get_latency(struct camu_mixer *mixer) static void add_buffer_internal(struct camu_mixer *mixer, struct camu_audio_buffer *buf) { + camu_audio_buffer_set_volume(buf, mixer->volume); #ifdef CAMU_MIXER_THREADED al_atomic_store(u8)(&buf->ref, 1, AL_ATOMIC_RELAXED); #endif diff --git a/src/mixer/mixer.h b/src/mixer/mixer.h index 9a15751..356e2b1 100644 --- a/src/mixer/mixer.h +++ b/src/mixer/mixer.h @@ -15,6 +15,7 @@ enum { struct camu_mixer { struct camu_audio *audio; + f32 volume; struct camu_resampler_format fmt; bool paused; u8 empty_after; @@ -31,6 +32,8 @@ struct camu_mixer { bool camu_mixer_init(struct camu_mixer *mixer, struct camu_audio *audio); void camu_mixer_pick_format(struct camu_mixer *mixer, struct camu_resampler_format *fmt); +void camu_mixer_set_volume(struct camu_mixer *mixer, f32 volume); +void camu_mixer_offset_volume(struct camu_mixer *mixer, f32 amount); f64 camu_mixer_get_latency(struct camu_mixer *mixer); void camu_mixer_add_buffer(struct camu_mixer *mixer, struct camu_audio_buffer *buf); void camu_mixer_remove_buffer(struct camu_mixer *mixer, struct camu_audio_buffer *buf); |