mirror of
https://github.com/mackron/miniaudio.git
synced 2026-04-21 15:56:58 +02:00
Version 0.11.2
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
Audio playback and capture library. Choice of public domain or MIT-0. See license statements at the end of this file.
|
||||
miniaudio - v0.11.1 - 2021-12-27
|
||||
miniaudio - v0.11.2 - 2021-12-31
|
||||
|
||||
David Reid - mackron@gmail.com
|
||||
|
||||
@@ -20,7 +20,7 @@ extern "C" {
|
||||
|
||||
#define MA_VERSION_MAJOR 0
|
||||
#define MA_VERSION_MINOR 11
|
||||
#define MA_VERSION_REVISION 1
|
||||
#define MA_VERSION_REVISION 2
|
||||
#define MA_VERSION_STRING MA_XSTRINGIFY(MA_VERSION_MAJOR) "." MA_XSTRINGIFY(MA_VERSION_MINOR) "." MA_XSTRINGIFY(MA_VERSION_REVISION)
|
||||
|
||||
#if defined(_MSC_VER) && !defined(__clang__)
|
||||
@@ -47,29 +47,42 @@ extern "C" {
|
||||
#include <stddef.h> /* For size_t. */
|
||||
|
||||
/* Sized types. */
|
||||
typedef signed char ma_int8;
|
||||
typedef unsigned char ma_uint8;
|
||||
typedef signed short ma_int16;
|
||||
typedef unsigned short ma_uint16;
|
||||
typedef signed int ma_int32;
|
||||
typedef unsigned int ma_uint32;
|
||||
#if defined(_MSC_VER) && !defined(__clang__)
|
||||
typedef signed __int64 ma_int64;
|
||||
typedef unsigned __int64 ma_uint64;
|
||||
#if defined(MA_USE_STDINT)
|
||||
#include <stdint.h>
|
||||
typedef int8_t ma_int8;
|
||||
typedef uint8_t ma_uint8;
|
||||
typedef int16_t ma_int16;
|
||||
typedef uint16_t ma_uint16;
|
||||
typedef int32_t ma_int32;
|
||||
typedef uint32_t ma_uint32;
|
||||
typedef int64_t ma_int64;
|
||||
typedef uint64_t ma_uint64;
|
||||
#else
|
||||
#if defined(__clang__) || (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)))
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wlong-long"
|
||||
#if defined(__clang__)
|
||||
#pragma GCC diagnostic ignored "-Wc++11-long-long"
|
||||
typedef signed char ma_int8;
|
||||
typedef unsigned char ma_uint8;
|
||||
typedef signed short ma_int16;
|
||||
typedef unsigned short ma_uint16;
|
||||
typedef signed int ma_int32;
|
||||
typedef unsigned int ma_uint32;
|
||||
#if defined(_MSC_VER) && !defined(__clang__)
|
||||
typedef signed __int64 ma_int64;
|
||||
typedef unsigned __int64 ma_uint64;
|
||||
#else
|
||||
#if defined(__clang__) || (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)))
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wlong-long"
|
||||
#if defined(__clang__)
|
||||
#pragma GCC diagnostic ignored "-Wc++11-long-long"
|
||||
#endif
|
||||
#endif
|
||||
typedef signed long long ma_int64;
|
||||
typedef unsigned long long ma_uint64;
|
||||
#if defined(__clang__) || (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)))
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
#endif
|
||||
typedef signed long long ma_int64;
|
||||
typedef unsigned long long ma_uint64;
|
||||
#if defined(__clang__) || (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)))
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
#endif
|
||||
#endif /* MA_USE_STDINT */
|
||||
|
||||
#if MA_SIZEOF_PTR == 8
|
||||
typedef ma_uint64 ma_uintptr;
|
||||
#else
|
||||
@@ -2143,6 +2156,84 @@ typedef enum
|
||||
#define MA_BACKEND_COUNT (ma_backend_null+1)
|
||||
|
||||
|
||||
/* Device notification types. */
|
||||
typedef enum
|
||||
{
|
||||
ma_device_notification_type_started,
|
||||
ma_device_notification_type_stopped,
|
||||
ma_device_notification_type_rerouted,
|
||||
ma_device_notification_type_interruption_began,
|
||||
ma_device_notification_type_interruption_ended
|
||||
} ma_device_notification_type;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ma_device* pDevice;
|
||||
ma_device_notification_type type;
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
int _unused;
|
||||
} started;
|
||||
struct
|
||||
{
|
||||
int _unused;
|
||||
} stopped;
|
||||
struct
|
||||
{
|
||||
int _unused;
|
||||
} rerouted;
|
||||
struct
|
||||
{
|
||||
int _unused;
|
||||
} interruption;
|
||||
} data;
|
||||
} ma_device_notification;
|
||||
|
||||
/*
|
||||
The notification callback for when the application should be notified of a change to the device.
|
||||
|
||||
This callback is used for notifying the application of changes such as when the device has started,
|
||||
stopped, rerouted or an interruption has occurred. Note that not all backends will post all
|
||||
notification types. For example, some backends will perform automatic stream routing without any
|
||||
kind of notification to the host program which means miniaudio will never know about it and will
|
||||
never be able to fire the rerouted notification. You should keep this in mind when designing your
|
||||
program.
|
||||
|
||||
The stopped notification will *not* get fired when a device is rerouted.
|
||||
|
||||
|
||||
Parameters
|
||||
----------
|
||||
pNotification (in)
|
||||
A pointer to a structure containing information about the event. Use the `pDevice` member of
|
||||
this object to retrieve the relevant device. The `type` member can be used to discriminate
|
||||
against each of the notification types.
|
||||
|
||||
|
||||
Remarks
|
||||
-------
|
||||
Do not restart or uninitialize the device from the callback.
|
||||
|
||||
Not all notifications will be triggered by all backends, however the started and stopped events
|
||||
should be reliable for all backends. Some backends do not have a good way to detect device
|
||||
stoppages due to unplugging the device which may result in the stopped callback not getting
|
||||
fired. This has been observed with at least one BSD variant.
|
||||
|
||||
The rerouted notification is fired *after* the reroute has occurred. The stopped notification will
|
||||
*not* get fired when a device is rerouted. The following backends are known to do automatic stream
|
||||
rerouting, but do not have a way to be notified of the change:
|
||||
|
||||
* DirectSound
|
||||
|
||||
The interruption notifications are used on mobile platforms for detecting when audio is interrupted
|
||||
due to things like an incoming phone call. Currently this is only implemented on iOS. None of the
|
||||
Android backends will report this notification.
|
||||
*/
|
||||
typedef void (* ma_device_notification_proc)(const ma_device_notification* pNotification);
|
||||
|
||||
|
||||
/*
|
||||
The callback for processing audio data from the device.
|
||||
|
||||
@@ -2185,7 +2276,12 @@ The proper way to stop the device is to call `ma_device_stop()` from a different
|
||||
*/
|
||||
typedef void (* ma_device_data_proc)(ma_device* pDevice, void* pOutput, const void* pInput, ma_uint32 frameCount);
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
DEPRECATED. Use ma_device_notification_proc instead.
|
||||
|
||||
The callback for when the device has been stopped.
|
||||
|
||||
This will be called when the device is stopped explicitly with `ma_device_stop()` and also called implicitly when the device is stopped through external forces
|
||||
@@ -2202,7 +2298,7 @@ Remarks
|
||||
-------
|
||||
Do not restart or uninitialize the device from the callback.
|
||||
*/
|
||||
typedef void (* ma_stop_proc)(ma_device* pDevice);
|
||||
typedef void (* ma_stop_proc)(ma_device* pDevice); /* DEPRECATED. Use ma_device_notification_proc instead. */
|
||||
|
||||
typedef enum
|
||||
{
|
||||
@@ -2381,6 +2477,7 @@ struct ma_device_config
|
||||
ma_bool8 noClip; /* When set to true, the contents of the output buffer passed into the data callback will be clipped after returning. Only applies when the playback sample format is f32. */
|
||||
ma_bool8 noDisableDenormals; /* Do not disable denormals when firing the data callback. */
|
||||
ma_device_data_proc dataCallback;
|
||||
ma_device_notification_proc notificationCallback;
|
||||
ma_stop_proc stopCallback;
|
||||
void* pUserData;
|
||||
ma_resampler_config resampling;
|
||||
@@ -2812,6 +2909,7 @@ struct ma_context
|
||||
ma_proc pa_stream_set_write_callback;
|
||||
ma_proc pa_stream_set_read_callback;
|
||||
ma_proc pa_stream_set_suspended_callback;
|
||||
ma_proc pa_stream_set_moved_callback;
|
||||
ma_proc pa_stream_is_suspended;
|
||||
ma_proc pa_stream_flush;
|
||||
ma_proc pa_stream_drain;
|
||||
@@ -2827,6 +2925,8 @@ struct ma_context
|
||||
|
||||
/*pa_mainloop**/ ma_ptr pMainLoop;
|
||||
/*pa_context**/ ma_ptr pPulseContext;
|
||||
char* pApplicationName; /* Set when the context is initialized. Used by devices for their local pa_context objects. */
|
||||
char* pServerName; /* Set when the context is initialized. Used by devices for their local pa_context objects. */
|
||||
} pulse;
|
||||
#endif
|
||||
#ifdef MA_SUPPORT_JACK
|
||||
@@ -3037,21 +3137,22 @@ struct ma_device
|
||||
ma_device_type type;
|
||||
ma_uint32 sampleRate;
|
||||
MA_ATOMIC(4, ma_device_state) state; /* The state of the device is variable and can change at any time on any thread. Must be used atomically. */
|
||||
ma_device_data_proc onData; /* Set once at initialization time and should not be changed after. */
|
||||
ma_stop_proc onStop; /* Set once at initialization time and should not be changed after. */
|
||||
void* pUserData; /* Application defined data. */
|
||||
ma_device_data_proc onData; /* Set once at initialization time and should not be changed after. */
|
||||
ma_device_notification_proc onNotification; /* Set once at initialization time and should not be changed after. */
|
||||
ma_stop_proc onStop; /* DEPRECATED. Use the notification callback instead. Set once at initialization time and should not be changed after. */
|
||||
void* pUserData; /* Application defined data. */
|
||||
ma_mutex startStopLock;
|
||||
ma_event wakeupEvent;
|
||||
ma_event startEvent;
|
||||
ma_event stopEvent;
|
||||
ma_thread thread;
|
||||
ma_result workResult; /* This is set by the worker thread after it's finished doing a job. */
|
||||
ma_bool8 isOwnerOfContext; /* When set to true, uninitializing the device will also uninitialize the context. Set to true when NULL is passed into ma_device_init(). */
|
||||
ma_result workResult; /* This is set by the worker thread after it's finished doing a job. */
|
||||
ma_bool8 isOwnerOfContext; /* When set to true, uninitializing the device will also uninitialize the context. Set to true when NULL is passed into ma_device_init(). */
|
||||
ma_bool8 noPreSilencedOutputBuffer;
|
||||
ma_bool8 noClip;
|
||||
ma_bool8 noDisableDenormals;
|
||||
MA_ATOMIC(4, float) masterVolumeFactor; /* Linear 0..1. Can be read and written simultaneously by different threads. Must be used atomically. */
|
||||
ma_duplex_rb duplexRB; /* Intermediary buffer for duplex device on asynchronous backends. */
|
||||
ma_duplex_rb duplexRB; /* Intermediary buffer for duplex device on asynchronous backends. */
|
||||
struct
|
||||
{
|
||||
ma_resample_algorithm algorithm;
|
||||
@@ -3180,6 +3281,8 @@ struct ma_device
|
||||
#ifdef MA_SUPPORT_PULSEAUDIO
|
||||
struct
|
||||
{
|
||||
/*pa_mainloop**/ ma_ptr pMainLoop;
|
||||
/*pa_context**/ ma_ptr pPulseContext;
|
||||
/*pa_stream**/ ma_ptr pStreamPlayback;
|
||||
/*pa_stream**/ ma_ptr pStreamCapture;
|
||||
} pulse;
|
||||
@@ -3212,7 +3315,7 @@ struct ma_device
|
||||
ma_bool32 isDefaultCaptureDevice;
|
||||
ma_bool32 isSwitchingPlaybackDevice; /* <-- Set to true when the default device has changed and miniaudio is in the process of switching. */
|
||||
ma_bool32 isSwitchingCaptureDevice; /* <-- Set to true when the default device has changed and miniaudio is in the process of switching. */
|
||||
void* pRouteChangeHandler; /* Only used on mobile platforms. Obj-C object for handling route changes. */
|
||||
void* pNotificationHandler; /* Only used on mobile platforms. Obj-C object for handling route changes. */
|
||||
} coreaudio;
|
||||
#endif
|
||||
#ifdef MA_SUPPORT_SNDIO
|
||||
@@ -3928,9 +4031,8 @@ then be set directly on the structure. Below are the members of the `ma_device_c
|
||||
dataCallback
|
||||
The callback to fire whenever data is ready to be delivered to or from the device.
|
||||
|
||||
stopCallback
|
||||
The callback to fire whenever the device has stopped, either explicitly via `ma_device_stop()`, or implicitly due to things like the device being
|
||||
disconnected.
|
||||
notificationCallback
|
||||
The callback to fire when something has changed with the device, such as whether or not it has been started or stopped.
|
||||
|
||||
pUserData
|
||||
The user data pointer to use with the device. You can access this directly from the device object like `device.pUserData`.
|
||||
@@ -6008,7 +6110,7 @@ typedef struct
|
||||
ma_uint32 flags;
|
||||
} ma_resource_manager_data_source_config;
|
||||
|
||||
MA_API ma_resource_manager_data_source_config ma_resource_manager_data_source_config_init();
|
||||
MA_API ma_resource_manager_data_source_config ma_resource_manager_data_source_config_init(void);
|
||||
|
||||
|
||||
typedef enum
|
||||
|
||||
Reference in New Issue
Block a user