Resource Manager: Fix a looping bug.

This is happening because the data buffer is incorrectly being reported
as busy (still loading) which is used to indicate to the engine that no
data is available and therefore nothing can be played.
This commit is contained in:
David Reid
2020-08-28 20:31:45 +10:00
parent 18fd90c74f
commit 3b840235f9
2 changed files with 10 additions and 3 deletions
+4 -3
View File
@@ -73,17 +73,18 @@ int main(int argc, char** argv)
/*ma_sound_set_volume(&sound, 0.25f);*/
//ma_sound_set_pitch(&sound, 2.0f);
ma_sound_set_pan(&sound, 0.0f);
ma_sound_set_looping(&sound, MA_TRUE);
//ma_sound_set_looping(&sound, MA_TRUE);
//ma_sound_seek_to_pcm_frame(&sound, 6000000);
//ma_sound_set_start_delay(&sound, 1110);
ma_sound_set_volume(&sound, 0.5f);
ma_sound_set_volume(&sound, 0.0f);
//ma_sound_set_fade_point_in_milliseconds(&sound, 0, 0, 1, 0, 2000);
//ma_sound_set_fade_point_auto_reset(&sound, 0, MA_FALSE); /* Enable fading around loop transitions. */
//ma_sound_set_fade_point_auto_reset(&sound, 1, MA_FALSE);
ma_sound_set_stop_delay(&sound, 1000);
ma_sound_start(&sound);
ma_sleep(1000);
//ma_sleep(1000);
ma_sound_set_looping(&sound2, MA_TRUE);
ma_sound_set_volume(&sound2, 0.5f);
ma_sound_start(&sound2);
+6
View File
@@ -2129,6 +2129,12 @@ static ma_bool32 ma_resource_manager_data_buffer_is_busy(ma_resource_manager_dat
*/
if (pDataBuffer->pNode->data.type == ma_resource_manager_data_buffer_encoding_decoded) {
ma_uint64 availableFrames;
/* If the sound has been fully loaded then we'll never be busy. */
if (pDataBuffer->pNode->data.decoded.decodedFrameCount == pDataBuffer->pNode->data.decoded.frameCount) {
return MA_FALSE; /* The sound is fully loaded. The buffer will never be busy. */
}
if (ma_resource_manager_data_buffer_get_available_frames(pDataBuffer, &availableFrames) == MA_SUCCESS) {
return availableFrames < requiredFrameCount;
}