From 553c7f00934504a835bb83d8f4f23bb67988fccb Mon Sep 17 00:00:00 2001 From: David Reid Date: Fri, 5 Feb 2021 20:29:06 +1000 Subject: [PATCH] Add some new APIs. * ma_sound_set_start_time_in_milliseconds() * ma_sound_set_stop_time_in_milliseconds() * ma_sound_group_set_start_time_in_milliseconds() * ma_sound_group_set_stop_time_in_milliseconds() --- research/miniaudio_engine.h | 50 +++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/research/miniaudio_engine.h b/research/miniaudio_engine.h index 25bde068..90519da2 100644 --- a/research/miniaudio_engine.h +++ b/research/miniaudio_engine.h @@ -1799,7 +1799,9 @@ MA_API ma_result ma_sound_set_fade_in_pcm_frames(ma_sound* pSound, float volumeB MA_API ma_result ma_sound_set_fade_in_milliseconds(ma_sound* pSound, float volumeBeg, float volumeEnd, ma_uint64 fadeLengthInMilliseconds); MA_API ma_result ma_sound_get_current_fade_volume(ma_sound* pSound, float* pVolume); MA_API ma_result ma_sound_set_start_time_in_pcm_frames(ma_sound* pSound, ma_uint64 absoluteGlobalTimeInFrames); +MA_API ma_result ma_sound_set_start_time_in_milliseconds(ma_sound* pSound, ma_uint64 absoluteGlobalTimeInMilliseconds); MA_API ma_result ma_sound_set_stop_time_in_pcm_frames(ma_sound* pSound, ma_uint64 absoluteGlobalTimeInFrames); +MA_API ma_result ma_sound_set_stop_time_in_milliseconds(ma_sound* pSound, ma_uint64 absoluteGlobalTimeInMilliseconds); MA_API ma_bool32 ma_sound_is_playing(const ma_sound* pSound); MA_API ma_bool32 ma_sound_at_end(const ma_sound* pSound); MA_API ma_result ma_sound_get_time_in_pcm_frames(const ma_sound* pSound, ma_uint64* pTimeInFrames); @@ -1810,6 +1812,7 @@ MA_API ma_result ma_sound_get_length_in_pcm_frames(ma_sound* pSound, ma_uint64* MA_API ma_result ma_sound_group_init(ma_engine* pEngine, ma_uint32 flags, ma_sound_group* pParentGroup, ma_sound_group* pGroup); MA_API void ma_sound_group_uninit(ma_sound_group* pGroup); +MA_API ma_engine* ma_sound_group_get_engine(const ma_sound_group* pGroup); MA_API ma_result ma_sound_group_start(ma_sound_group* pGroup); MA_API ma_result ma_sound_group_stop(ma_sound_group* pGroup); MA_API ma_result ma_sound_group_set_volume(ma_sound_group* pGroup, float volume); @@ -1845,7 +1848,9 @@ MA_API ma_result ma_sound_group_set_fade_in_pcm_frames(ma_sound_group* pGroup, f MA_API ma_result ma_sound_group_set_fade_in_milliseconds(ma_sound_group* pGroup, float volumeBeg, float volumeEnd, ma_uint64 fadeLengthInMilliseconds); MA_API ma_result ma_sound_group_get_current_fade_volume(ma_sound_group* pGroup, float* pVolume); MA_API ma_result ma_sound_group_set_start_time_in_pcm_frames(ma_sound_group* pGroup, ma_uint64 absoluteGlobalTimeInFrames); +MA_API ma_result ma_sound_group_set_start_time_in_milliseconds(ma_sound_group* pGroup, ma_uint64 absoluteGlobalTimeInMilliseconds); MA_API ma_result ma_sound_group_set_stop_time_in_pcm_frames(ma_sound_group* pGroup, ma_uint64 absoluteGlobalTimeInFrames); +MA_API ma_result ma_sound_group_set_stop_time_in_milliseconds(ma_sound_group* pGroup, ma_uint64 absoluteGlobalTimeInMilliseconds); MA_API ma_bool32 ma_sound_group_is_playing(const ma_sound_group* pGroup); MA_API ma_result ma_sound_group_get_time_in_pcm_frames(const ma_sound_group* pGroup, ma_uint64* pTimeInFrames); @@ -11441,6 +11446,15 @@ MA_API ma_result ma_sound_set_start_time_in_pcm_frames(ma_sound* pSound, ma_uint return ma_node_set_state_time(pSound, ma_node_state_started, absoluteGlobalTimeInFrames); } +MA_API ma_result ma_sound_set_start_time_in_milliseconds(ma_sound* pSound, ma_uint64 absoluteGlobalTimeInMilliseconds) +{ + if (pSound == NULL) { + return MA_INVALID_ARGS; + } + + return ma_sound_set_start_time_in_pcm_frames(pSound, absoluteGlobalTimeInMilliseconds * ma_engine_get_sample_rate(ma_sound_get_engine(pSound)) / 1000); +} + MA_API ma_result ma_sound_set_stop_time_in_pcm_frames(ma_sound* pSound, ma_uint64 absoluteGlobalTimeInFrames) { if (pSound == NULL) { @@ -11450,6 +11464,15 @@ MA_API ma_result ma_sound_set_stop_time_in_pcm_frames(ma_sound* pSound, ma_uint6 return ma_node_set_state_time(pSound, ma_node_state_stopped, absoluteGlobalTimeInFrames); } +MA_API ma_result ma_sound_set_stop_time_in_milliseconds(ma_sound* pSound, ma_uint64 absoluteGlobalTimeInMilliseconds) +{ + if (pSound == NULL) { + return MA_INVALID_ARGS; + } + + return ma_sound_set_stop_time_in_pcm_frames(pSound, absoluteGlobalTimeInMilliseconds * ma_engine_get_sample_rate(ma_sound_get_engine(pSound)) / 1000); +} + MA_API ma_bool32 ma_sound_is_playing(const ma_sound* pSound) { if (pSound == NULL) { @@ -11599,6 +11622,15 @@ MA_API void ma_sound_group_uninit(ma_sound_group* pGroup) ma_node_uninit(pGroup, &pGroup->engineNode.pEngine->allocationCallbacks); } +MA_API ma_engine* ma_sound_group_get_engine(const ma_sound_group* pGroup) +{ + if (pGroup == NULL) { + return NULL; + } + + return pGroup->engineNode.pEngine; +} + MA_API ma_result ma_sound_group_start(ma_sound_group* pGroup) { if (pGroup == NULL) { @@ -11929,6 +11961,15 @@ MA_API ma_result ma_sound_group_set_start_time_in_pcm_frames(ma_sound_group* pGr return ma_node_set_state_time(pGroup, ma_node_state_started, absoluteGlobalTimeInFrames); } +MA_API ma_result ma_sound_group_set_start_time_in_milliseconds(ma_sound_group* pGroup, ma_uint64 absoluteGlobalTimeInMilliseconds) +{ + if (pGroup == NULL) { + return MA_INVALID_ARGS; + } + + return ma_sound_group_set_start_time_in_pcm_frames(pGroup, absoluteGlobalTimeInMilliseconds * ma_engine_get_sample_rate(ma_sound_group_get_engine(pGroup)) / 1000); +} + MA_API ma_result ma_sound_group_set_stop_time_in_pcm_frames(ma_sound_group* pGroup, ma_uint64 absoluteGlobalTimeInFrames) { if (pGroup == NULL) { @@ -11938,6 +11979,15 @@ MA_API ma_result ma_sound_group_set_stop_time_in_pcm_frames(ma_sound_group* pGro return ma_node_set_state_time(pGroup, ma_node_state_stopped, absoluteGlobalTimeInFrames); } +MA_API ma_result ma_sound_group_set_stop_time_in_milliseconds(ma_sound_group* pGroup, ma_uint64 absoluteGlobalTimeInMilliseconds) +{ + if (pGroup == NULL) { + return MA_INVALID_ARGS; + } + + return ma_sound_group_set_stop_time_in_pcm_frames(pGroup, absoluteGlobalTimeInMilliseconds * ma_engine_get_sample_rate(ma_sound_group_get_engine(pGroup)) / 1000); +} + MA_API ma_bool32 ma_sound_group_is_playing(const ma_sound_group* pGroup) { if (pGroup == NULL) {