mirror of
https://github.com/mackron/miniaudio.git
synced 2026-04-23 16:54:03 +02:00
Add support for setting a callback for when a sound finishes loading.
This commit is contained in:
+22
-3
@@ -6188,6 +6188,7 @@ typedef void ma_async_notification;
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
void (* onSignal)(ma_async_notification* pNotification);
|
void (* onSignal)(ma_async_notification* pNotification);
|
||||||
|
void* pUserData;
|
||||||
} ma_async_notification_callbacks;
|
} ma_async_notification_callbacks;
|
||||||
|
|
||||||
MA_API ma_result ma_async_notification_signal(ma_async_notification* pNotification);
|
MA_API ma_result ma_async_notification_signal(ma_async_notification* pNotification);
|
||||||
@@ -10987,8 +10988,9 @@ MA_API void ma_engine_node_uninit(ma_engine_node* pEngineNode, const ma_allocati
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
ma_fence* pLoadedFence; /* Set to NULL if not using a fence. */
|
ma_fence* pLoadedFence; /* Set to NULL if not using a fence. */
|
||||||
void (* onAtEnd)(void* pUserData, ma_sound* pSound); /* Fired when the sound reaches the end of the data source. */
|
void (* onLoaded)(void* pUserData, ma_sound* pSuond); /* Fired by the resource manager when the sound has finished loading. */
|
||||||
|
void (* onAtEnd )(void* pUserData, ma_sound* pSound); /* Fired when the sound reaches the end of the data source. */
|
||||||
void* pUserData;
|
void* pUserData;
|
||||||
} ma_sound_notifications;
|
} ma_sound_notifications;
|
||||||
|
|
||||||
@@ -11032,6 +11034,7 @@ struct ma_sound
|
|||||||
*/
|
*/
|
||||||
#ifndef MA_NO_RESOURCE_MANAGER
|
#ifndef MA_NO_RESOURCE_MANAGER
|
||||||
ma_resource_manager_data_source* pResourceManagerDataSource;
|
ma_resource_manager_data_source* pResourceManagerDataSource;
|
||||||
|
ma_async_notification_callbacks resourceManagerDoneNotification;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -16831,7 +16834,7 @@ MA_API ma_result ma_async_notification_signal(ma_async_notification* pNotificati
|
|||||||
}
|
}
|
||||||
|
|
||||||
pNotificationCallbacks->onSignal(pNotification);
|
pNotificationCallbacks->onSignal(pNotification);
|
||||||
return MA_INVALID_ARGS;
|
return MA_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -74867,6 +74870,16 @@ static ma_result ma_sound_init_from_data_source_internal(ma_engine* pEngine, con
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifndef MA_NO_RESOURCE_MANAGER
|
#ifndef MA_NO_RESOURCE_MANAGER
|
||||||
|
static void ma_sound__on_async_notification_loaded(ma_async_notification* pNotification)
|
||||||
|
{
|
||||||
|
ma_sound* pSound = (ma_sound*)((ma_async_notification_callbacks*)pNotification)->pUserData;
|
||||||
|
MA_ASSERT(pSound != NULL);
|
||||||
|
|
||||||
|
if (pSound->notifications.onLoaded) {
|
||||||
|
pSound->notifications.onLoaded(pSound->notifications.pUserData, pSound);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
MA_API ma_result ma_sound_init_from_file_internal(ma_engine* pEngine, const ma_sound_config* pConfig, ma_sound* pSound)
|
MA_API ma_result ma_sound_init_from_file_internal(ma_engine* pEngine, const ma_sound_config* pConfig, ma_sound* pSound)
|
||||||
{
|
{
|
||||||
ma_result result = MA_SUCCESS;
|
ma_result result = MA_SUCCESS;
|
||||||
@@ -74894,6 +74907,12 @@ MA_API ma_result ma_sound_init_from_file_internal(ma_engine* pEngine, const ma_s
|
|||||||
notifications = ma_resource_manager_pipeline_notifications_init();
|
notifications = ma_resource_manager_pipeline_notifications_init();
|
||||||
if (pConfig->pNotifications != NULL) {
|
if (pConfig->pNotifications != NULL) {
|
||||||
notifications.done.pFence = pConfig->pNotifications->pLoadedFence;
|
notifications.done.pFence = pConfig->pNotifications->pLoadedFence;
|
||||||
|
|
||||||
|
if (pConfig->pNotifications->onLoaded != NULL) {
|
||||||
|
pSound->resourceManagerDoneNotification.onSignal = ma_sound__on_async_notification_loaded;
|
||||||
|
pSound->resourceManagerDoneNotification.pUserData = pSound;
|
||||||
|
notifications.done.pNotification = &pSound->resourceManagerDoneNotification;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user