Commit 3265107c authored by David Reid's avatar David Reid

Fix a bug in ma_sound_is_playing().

This bug is due to the current time not being taken into account when
determining the node state.

Public issue https://github.com/mackron/miniaudio/issues/269
parent ee73374d
......@@ -895,6 +895,7 @@ MA_API ma_result ma_node_set_state(ma_node* pNode, ma_node_state state);
MA_API ma_node_state ma_node_get_state(const ma_node* pNode);
MA_API ma_result ma_node_set_state_time(ma_node* pNode, ma_node_state state, ma_uint64 globalTime);
MA_API ma_uint64 ma_node_get_state_time(const ma_node* pNode, ma_node_state state);
MA_API ma_node_state ma_node_get_state_by_time(const ma_node* pNode, ma_uint64 globalTime);
MA_API ma_node_state ma_node_get_state_by_time_range(const ma_node* pNode, ma_uint64 globalTimeBeg, ma_uint64 globalTimeEnd);
MA_API ma_uint64 ma_node_get_time(const ma_node* pNode);
MA_API ma_result ma_node_set_time(ma_node* pNode, ma_uint64 localTime);
......@@ -3352,6 +3353,15 @@ MA_API ma_uint64 ma_node_get_state_time(const ma_node* pNode, ma_node_state stat
return c89atomic_load_64(&((ma_node_base*)pNode)->stateTimes[state]);
}
MA_API ma_node_state ma_node_get_state_by_time(const ma_node* pNode, ma_uint64 globalTime)
{
if (pNode == NULL) {
return ma_node_state_stopped;
}
return ma_node_get_state_by_time_range(pNode, globalTime, globalTime);
}
MA_API ma_node_state ma_node_get_state_by_time_range(const ma_node* pNode, ma_uint64 globalTimeBeg, ma_uint64 globalTimeEnd)
{
ma_node_state state;
......@@ -11438,7 +11448,7 @@ MA_API ma_bool32 ma_sound_is_playing(const ma_sound* pSound)
return MA_FALSE;
}
return ma_node_get_state(pSound) == ma_node_state_started;
return ma_node_get_state_by_time(pSound, ma_engine_get_time(pSound->engineNode.pEngine)) == ma_node_state_started;
}
MA_API ma_bool32 ma_sound_at_end(const ma_sound* pSound)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment