Commit 5fc5c4d4 authored by David Reid's avatar David Reid

Add new functions for getting and setting the engine's global time.

  * ma_engine_get_time_in_pcm_frames() (replaces ma_engine_get_time())
  * ma_engine_get_time_in_milliseconds()
  * ma_engine_set_time_in_pcm_frames() (replaces ma_engine_set_time())
  * ma_engine_set_time_in_milliseconds()

These changes are consistent with the naming of other time based
functions, eliminates ambiguity and just makes it clearer as to what
you're working with.

ma_engine_get_time() and ma_engine_set_time() have been deprecated.
parent d63a3894
...@@ -398,13 +398,13 @@ the be started and/or stopped at a specific time. This can be done with the foll ...@@ -398,13 +398,13 @@ the be started and/or stopped at a specific time. This can be done with the foll
``` ```
The start/stop time needs to be specified based on the absolute timer which is controlled by the The start/stop time needs to be specified based on the absolute timer which is controlled by the
engine. The current global time time in PCM frames can be retrieved with `ma_engine_get_time()`. engine. The current global time time in PCM frames can be retrieved with
The engine's global time can be changed with `ma_engine_set_time()` for synchronization purposes if `ma_engine_get_time_in_pcm_frames()`. The engine's global time can be changed with
required. Note that scheduling a start time still requires an explicit call to `ma_sound_start()` `ma_engine_set_time_in_pcm_frames()` for synchronization purposes if required. Note that scheduling
before anything will play: a start time still requires an explicit call to `ma_sound_start()` before anything will play:
```c ```c
ma_sound_set_start_time_in_pcm_frames(&sound, ma_engine_get_time(&engine) + (ma_engine_get_sample_rate(&engine) * 2); ma_sound_set_start_time_in_pcm_frames(&sound, ma_engine_get_time_in_pcm_frames(&engine) + (ma_engine_get_sample_rate(&engine) * 2);
ma_sound_start(&sound); ma_sound_start(&sound);
``` ```
...@@ -1429,19 +1429,19 @@ can be useful to schedule a sound to start or stop: ...@@ -1429,19 +1429,19 @@ can be useful to schedule a sound to start or stop:
```c ```c
// Start the sound in 1 second from now. // Start the sound in 1 second from now.
ma_sound_set_start_time_in_pcm_frames(&sound, ma_engine_get_time(&engine) + (ma_engine_get_sample_rate(&engine) * 1)); ma_sound_set_start_time_in_pcm_frames(&sound, ma_engine_get_time_in_pcm_frames(&engine) + (ma_engine_get_sample_rate(&engine) * 1));
// Stop the sound in 2 seconds from now. // Stop the sound in 2 seconds from now.
ma_sound_set_stop_time_in_pcm_frames(&sound, ma_engine_get_time(&engine) + (ma_engine_get_sample_rate(&engine) * 2)); ma_sound_set_stop_time_in_pcm_frames(&sound, ma_engine_get_time_in_pcm_frames(&engine) + (ma_engine_get_sample_rate(&engine) * 2));
``` ```
Note that scheduling a start time still requires an explicit call to `ma_sound_start()` before Note that scheduling a start time still requires an explicit call to `ma_sound_start()` before
anything will play. anything will play.
The time is specified in global time which is controlled by the engine. You can get the engine's The time is specified in global time which is controlled by the engine. You can get the engine's
current time with `ma_engine_get_time()`. The engine's global time is incremented automatically as current time with `ma_engine_get_time_in_pcm_frames()`. The engine's global time is incremented
audio data is read, but it can be reset with `ma_engine_set_time()` in case it needs to be automatically as audio data is read, but it can be reset with `ma_engine_set_time_in_pcm_frames()`
resynchronized for some reason. in case it needs to be resynchronized for some reason.
To determine whether or not a sound is currently playing, use `ma_sound_is_playing()`. This will To determine whether or not a sound is currently playing, use `ma_sound_is_playing()`. This will
take the scheduled start and stop times into account. take the scheduled start and stop times into account.
...@@ -11138,8 +11138,12 @@ MA_API ma_resource_manager* ma_engine_get_resource_manager(ma_engine* pEngine); ...@@ -11138,8 +11138,12 @@ MA_API ma_resource_manager* ma_engine_get_resource_manager(ma_engine* pEngine);
MA_API ma_device* ma_engine_get_device(ma_engine* pEngine); MA_API ma_device* ma_engine_get_device(ma_engine* pEngine);
MA_API ma_log* ma_engine_get_log(ma_engine* pEngine); MA_API ma_log* ma_engine_get_log(ma_engine* pEngine);
MA_API ma_node* ma_engine_get_endpoint(ma_engine* pEngine); MA_API ma_node* ma_engine_get_endpoint(ma_engine* pEngine);
MA_API ma_uint64 ma_engine_get_time(const ma_engine* pEngine); MA_API ma_uint64 ma_engine_get_time_in_pcm_frames(const ma_engine* pEngine);
MA_API ma_result ma_engine_set_time(ma_engine* pEngine, ma_uint64 globalTime); MA_API ma_uint64 ma_engine_get_time_in_milliseconds(const ma_engine* pEngine);
MA_API ma_result ma_engine_set_time_in_pcm_frames(ma_engine* pEngine, ma_uint64 globalTime);
MA_API ma_result ma_engine_set_time_in_milliseconds(ma_engine* pEngine, ma_uint64 globalTime);
MA_API ma_uint64 ma_engine_get_time(const ma_engine* pEngine); /* Deprecated. Use ma_engine_get_time_in_pcm_frames(). Will be removed in version 0.12. */
MA_API ma_result ma_engine_set_time(ma_engine* pEngine, ma_uint64 globalTime); /* Deprecated. Use ma_engine_set_time_in_pcm_frames(). Will be removed in version 0.12. */
MA_API ma_uint32 ma_engine_get_channels(const ma_engine* pEngine); MA_API ma_uint32 ma_engine_get_channels(const ma_engine* pEngine);
MA_API ma_uint32 ma_engine_get_sample_rate(const ma_engine* pEngine); MA_API ma_uint32 ma_engine_get_sample_rate(const ma_engine* pEngine);
...@@ -74465,16 +74469,36 @@ MA_API ma_node* ma_engine_get_endpoint(ma_engine* pEngine) ...@@ -74465,16 +74469,36 @@ MA_API ma_node* ma_engine_get_endpoint(ma_engine* pEngine)
return ma_node_graph_get_endpoint(&pEngine->nodeGraph); return ma_node_graph_get_endpoint(&pEngine->nodeGraph);
} }
MA_API ma_uint64 ma_engine_get_time(const ma_engine* pEngine) MA_API ma_uint64 ma_engine_get_time_in_pcm_frames(const ma_engine* pEngine)
{ {
return ma_node_graph_get_time(&pEngine->nodeGraph); return ma_node_graph_get_time(&pEngine->nodeGraph);
} }
MA_API ma_result ma_engine_set_time(ma_engine* pEngine, ma_uint64 globalTime) MA_API ma_uint64 ma_engine_get_time_in_milliseconds(const ma_engine* pEngine)
{
return ma_engine_get_time_in_pcm_frames(pEngine) * 1000 / ma_engine_get_sample_rate(pEngine);
}
MA_API ma_result ma_engine_set_time_in_pcm_frames(ma_engine* pEngine, ma_uint64 globalTime)
{ {
return ma_node_graph_set_time(&pEngine->nodeGraph, globalTime); return ma_node_graph_set_time(&pEngine->nodeGraph, globalTime);
} }
MA_API ma_result ma_engine_set_time_in_milliseconds(ma_engine* pEngine, ma_uint64 globalTime)
{
return ma_engine_set_time_in_pcm_frames(pEngine, globalTime * ma_engine_get_sample_rate(pEngine) / 1000);
}
MA_API ma_uint64 ma_engine_get_time(const ma_engine* pEngine)
{
return ma_engine_get_time_in_pcm_frames(pEngine);
}
MA_API ma_result ma_engine_set_time(ma_engine* pEngine, ma_uint64 globalTime)
{
return ma_engine_set_time_in_pcm_frames(pEngine, globalTime);
}
MA_API ma_uint32 ma_engine_get_channels(const ma_engine* pEngine) MA_API ma_uint32 ma_engine_get_channels(const ma_engine* pEngine)
{ {
return ma_node_graph_get_channels(&pEngine->nodeGraph); return ma_node_graph_get_channels(&pEngine->nodeGraph);
...@@ -75695,7 +75719,7 @@ MA_API ma_bool32 ma_sound_is_playing(const ma_sound* pSound) ...@@ -75695,7 +75719,7 @@ MA_API ma_bool32 ma_sound_is_playing(const ma_sound* pSound)
return MA_FALSE; return MA_FALSE;
} }
return ma_node_get_state_by_time(pSound, ma_engine_get_time(ma_sound_get_engine(pSound))) == ma_node_state_started; return ma_node_get_state_by_time(pSound, ma_engine_get_time_in_pcm_frames(ma_sound_get_engine(pSound))) == ma_node_state_started;
} }
MA_API ma_uint64 ma_sound_get_time_in_pcm_frames(const ma_sound* pSound) MA_API ma_uint64 ma_sound_get_time_in_pcm_frames(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