mirror of
https://github.com/mackron/miniaudio.git
synced 2026-04-21 15:56:58 +02:00
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.
This commit is contained in:
+39
-15
@@ -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
|
||||
engine. The current global time time in PCM frames can be retrieved with `ma_engine_get_time()`.
|
||||
The engine's global time can be changed with `ma_engine_set_time()` for synchronization purposes if
|
||||
required. Note that scheduling a start time still requires an explicit call to `ma_sound_start()`
|
||||
before anything will play:
|
||||
engine. The current global time time in PCM frames can be retrieved with
|
||||
`ma_engine_get_time_in_pcm_frames()`. The engine's global time can be changed with
|
||||
`ma_engine_set_time_in_pcm_frames()` for synchronization purposes if required. Note that scheduling
|
||||
a start time still requires an explicit call to `ma_sound_start()` before anything will play:
|
||||
|
||||
```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);
|
||||
```
|
||||
|
||||
@@ -1429,19 +1429,19 @@ can be useful to schedule a sound to start or stop:
|
||||
|
||||
```c
|
||||
// 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.
|
||||
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
|
||||
anything will play.
|
||||
|
||||
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
|
||||
audio data is read, but it can be reset with `ma_engine_set_time()` in case it needs to be
|
||||
resynchronized for some reason.
|
||||
current time with `ma_engine_get_time_in_pcm_frames()`. The engine's global time is incremented
|
||||
automatically as audio data is read, but it can be reset with `ma_engine_set_time_in_pcm_frames()`
|
||||
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
|
||||
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);
|
||||
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_node* ma_engine_get_endpoint(ma_engine* pEngine);
|
||||
MA_API ma_uint64 ma_engine_get_time(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_pcm_frames(const ma_engine* pEngine);
|
||||
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_sample_rate(const 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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
return ma_node_graph_get_channels(&pEngine->nodeGraph);
|
||||
@@ -75695,7 +75719,7 @@ MA_API ma_bool32 ma_sound_is_playing(const ma_sound* pSound)
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user