mirror of
https://github.com/mackron/miniaudio.git
synced 2026-04-22 00:06:59 +02:00
AAudio: Add support for configuring content type and input preset.
This commit is contained in:
+59
@@ -3160,6 +3160,7 @@ typedef enum
|
|||||||
ma_aaudio_input_preset_default = 0, /* Leaves the input preset unset. */
|
ma_aaudio_input_preset_default = 0, /* Leaves the input preset unset. */
|
||||||
ma_aaudio_input_preset_generic, /* AAUDIO_INPUT_PRESET_GENERIC */
|
ma_aaudio_input_preset_generic, /* AAUDIO_INPUT_PRESET_GENERIC */
|
||||||
ma_aaudio_input_preset_camcorder, /* AAUDIO_INPUT_PRESET_CAMCORDER */
|
ma_aaudio_input_preset_camcorder, /* AAUDIO_INPUT_PRESET_CAMCORDER */
|
||||||
|
ma_aaudio_input_preset_unprocessed, /* AAUDIO_INPUT_PRESET_UNPROCESSED */
|
||||||
ma_aaudio_input_preset_voice_recognition, /* AAUDIO_INPUT_PRESET_VOICE_RECOGNITION */
|
ma_aaudio_input_preset_voice_recognition, /* AAUDIO_INPUT_PRESET_VOICE_RECOGNITION */
|
||||||
ma_aaudio_input_preset_voice_communication, /* AAUDIO_INPUT_PRESET_VOICE_COMMUNICATION */
|
ma_aaudio_input_preset_voice_communication, /* AAUDIO_INPUT_PRESET_VOICE_COMMUNICATION */
|
||||||
ma_aaudio_input_preset_voice_performance /* AAUDIO_INPUT_PRESET_VOICE_PERFORMANCE */
|
ma_aaudio_input_preset_voice_performance /* AAUDIO_INPUT_PRESET_VOICE_PERFORMANCE */
|
||||||
@@ -3775,6 +3776,8 @@ struct ma_context
|
|||||||
ma_proc AAudioStreamBuilder_setDataCallback;
|
ma_proc AAudioStreamBuilder_setDataCallback;
|
||||||
ma_proc AAudioStreamBuilder_setErrorCallback;
|
ma_proc AAudioStreamBuilder_setErrorCallback;
|
||||||
ma_proc AAudioStreamBuilder_setPerformanceMode;
|
ma_proc AAudioStreamBuilder_setPerformanceMode;
|
||||||
|
ma_proc AAudioStreamBuilder_setContentType;
|
||||||
|
ma_proc AAudioStreamBuilder_setInputPreset;
|
||||||
ma_proc AAudioStreamBuilder_openStream;
|
ma_proc AAudioStreamBuilder_openStream;
|
||||||
ma_proc AAudioStream_close;
|
ma_proc AAudioStream_close;
|
||||||
ma_proc AAudioStream_getState;
|
ma_proc AAudioStream_getState;
|
||||||
@@ -29023,6 +29026,8 @@ typedef int32_t ma_aaudio_sharing_mode_t;
|
|||||||
typedef int32_t ma_aaudio_format_t;
|
typedef int32_t ma_aaudio_format_t;
|
||||||
typedef int32_t ma_aaudio_stream_state_t;
|
typedef int32_t ma_aaudio_stream_state_t;
|
||||||
typedef int32_t ma_aaudio_performance_mode_t;
|
typedef int32_t ma_aaudio_performance_mode_t;
|
||||||
|
typedef int32_t ma_aaudio_content_type_t;
|
||||||
|
typedef int32_t ma_aaudio_input_preset_t;
|
||||||
typedef int32_t ma_aaudio_data_callback_result_t;
|
typedef int32_t ma_aaudio_data_callback_result_t;
|
||||||
|
|
||||||
/* Result codes. miniaudio only cares about the success code. */
|
/* Result codes. miniaudio only cares about the success code. */
|
||||||
@@ -29061,6 +29066,20 @@ typedef int32_t ma_aaudio_data_callback_result_t;
|
|||||||
#define MA_AAUDIO_PERFORMANCE_MODE_POWER_SAVING 11
|
#define MA_AAUDIO_PERFORMANCE_MODE_POWER_SAVING 11
|
||||||
#define MA_AAUDIO_PERFORMANCE_MODE_LOW_LATENCY 12
|
#define MA_AAUDIO_PERFORMANCE_MODE_LOW_LATENCY 12
|
||||||
|
|
||||||
|
/* Content types. */
|
||||||
|
#define MA_AAUDIO_CONTENT_TYPE_SPEECH 1
|
||||||
|
#define MA_AAUDIO_CONTENT_TYPE_MUSIC 2
|
||||||
|
#define MA_AAUDIO_CONTENT_TYPE_MOVIE 3
|
||||||
|
#define MA_AAUDIO_CONTENT_TYPE_SONIFICATION 4
|
||||||
|
|
||||||
|
/* Input presets. */
|
||||||
|
#define MA_AAUDIO_INPUT_PRESET_GENERIC 1
|
||||||
|
#define MA_AAUDIO_INPUT_PRESET_CAMCORDER 5
|
||||||
|
#define MA_AAUDIO_INPUT_PRESET_VOICE_RECOGNITION 6
|
||||||
|
#define MA_AAUDIO_INPUT_PRESET_VOICE_COMMUNICATION 7
|
||||||
|
#define MA_AAUDIO_INPUT_PRESET_UNPROCESSED 9
|
||||||
|
#define MA_AAUDIO_INPUT_PRESET_VOICE_PERFORMANCE 10
|
||||||
|
|
||||||
/* Callback results. */
|
/* Callback results. */
|
||||||
#define MA_AAUDIO_CALLBACK_RESULT_CONTINUE 0
|
#define MA_AAUDIO_CALLBACK_RESULT_CONTINUE 0
|
||||||
#define MA_AAUDIO_CALLBACK_RESULT_STOP 1
|
#define MA_AAUDIO_CALLBACK_RESULT_STOP 1
|
||||||
@@ -29085,6 +29104,8 @@ typedef void (* MA_PFN_AAudioStreamBuilder_setFramesPerDataC
|
|||||||
typedef void (* MA_PFN_AAudioStreamBuilder_setDataCallback) (ma_AAudioStreamBuilder* pBuilder, ma_AAudioStream_dataCallback callback, void* pUserData);
|
typedef void (* MA_PFN_AAudioStreamBuilder_setDataCallback) (ma_AAudioStreamBuilder* pBuilder, ma_AAudioStream_dataCallback callback, void* pUserData);
|
||||||
typedef void (* MA_PFN_AAudioStreamBuilder_setErrorCallback) (ma_AAudioStreamBuilder* pBuilder, ma_AAudioStream_errorCallback callback, void* pUserData);
|
typedef void (* MA_PFN_AAudioStreamBuilder_setErrorCallback) (ma_AAudioStreamBuilder* pBuilder, ma_AAudioStream_errorCallback callback, void* pUserData);
|
||||||
typedef void (* MA_PFN_AAudioStreamBuilder_setPerformanceMode) (ma_AAudioStreamBuilder* pBuilder, ma_aaudio_performance_mode_t mode);
|
typedef void (* MA_PFN_AAudioStreamBuilder_setPerformanceMode) (ma_AAudioStreamBuilder* pBuilder, ma_aaudio_performance_mode_t mode);
|
||||||
|
typedef void (* MA_PFN_AAudioStreamBuilder_setContentType) (ma_AAudioStreamBuilder* pBuilder, ma_aaudio_content_type_t contentType);
|
||||||
|
typedef void (* MA_PFN_AAudioStreamBuilder_setInputPreset) (ma_AAudioStreamBuilder* pBuilder, ma_aaudio_input_preset_t inputPreset);
|
||||||
typedef ma_aaudio_result_t (* MA_PFN_AAudioStreamBuilder_openStream) (ma_AAudioStreamBuilder* pBuilder, ma_AAudioStream** ppStream);
|
typedef ma_aaudio_result_t (* MA_PFN_AAudioStreamBuilder_openStream) (ma_AAudioStreamBuilder* pBuilder, ma_AAudioStream** ppStream);
|
||||||
typedef ma_aaudio_result_t (* MA_PFN_AAudioStream_close) (ma_AAudioStream* pStream);
|
typedef ma_aaudio_result_t (* MA_PFN_AAudioStream_close) (ma_AAudioStream* pStream);
|
||||||
typedef ma_aaudio_stream_state_t (* MA_PFN_AAudioStream_getState) (ma_AAudioStream* pStream);
|
typedef ma_aaudio_stream_state_t (* MA_PFN_AAudioStream_getState) (ma_AAudioStream* pStream);
|
||||||
@@ -29109,6 +29130,34 @@ static ma_result ma_result_from_aaudio(ma_aaudio_result_t resultAA)
|
|||||||
return MA_ERROR;
|
return MA_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ma_aaudio_content_type_t ma_to_content_type__aaudio(ma_aaudio_content_type contentType)
|
||||||
|
{
|
||||||
|
switch (contentType) {
|
||||||
|
case ma_aaudio_content_type_movie: return MA_AAUDIO_CONTENT_TYPE_MOVIE;
|
||||||
|
case ma_aaudio_content_type_music: return MA_AAUDIO_CONTENT_TYPE_MUSIC;
|
||||||
|
case ma_aaudio_content_type_sonification: return MA_AAUDIO_CONTENT_TYPE_SONIFICATION;
|
||||||
|
case ma_aaudio_content_type_speech: return MA_AAUDIO_CONTENT_TYPE_SPEECH;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return MA_AAUDIO_CONTENT_TYPE_SPEECH;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ma_aaudio_input_preset_t ma_to_input_preset__aaudio(ma_aaudio_input_preset inputPreset)
|
||||||
|
{
|
||||||
|
switch (inputPreset) {
|
||||||
|
case ma_aaudio_input_preset_generic: return MA_AAUDIO_INPUT_PRESET_GENERIC;
|
||||||
|
case ma_aaudio_input_preset_camcorder: return MA_AAUDIO_INPUT_PRESET_CAMCORDER;
|
||||||
|
case ma_aaudio_input_preset_unprocessed: return MA_AAUDIO_INPUT_PRESET_UNPROCESSED;
|
||||||
|
case ma_aaudio_input_preset_voice_recognition: return MA_AAUDIO_INPUT_PRESET_VOICE_RECOGNITION;
|
||||||
|
case ma_aaudio_input_preset_voice_communication: return MA_AAUDIO_INPUT_PRESET_VOICE_COMMUNICATION;
|
||||||
|
case ma_aaudio_input_preset_voice_performance: return MA_AAUDIO_INPUT_PRESET_VOICE_PERFORMANCE;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return MA_AAUDIO_INPUT_PRESET_GENERIC;
|
||||||
|
}
|
||||||
|
|
||||||
static void ma_stream_error_callback__aaudio(ma_AAudioStream* pStream, void* pUserData, ma_aaudio_result_t error)
|
static void ma_stream_error_callback__aaudio(ma_AAudioStream* pStream, void* pUserData, ma_aaudio_result_t error)
|
||||||
{
|
{
|
||||||
ma_device* pDevice = (ma_device*)pUserData;
|
ma_device* pDevice = (ma_device*)pUserData;
|
||||||
@@ -29214,8 +29263,16 @@ static ma_result ma_open_stream__aaudio(ma_context* pContext, ma_device_type dev
|
|||||||
((MA_PFN_AAudioStreamBuilder_setFramesPerDataCallback)pContext->aaudio.AAudioStreamBuilder_setFramesPerDataCallback)(pBuilder, bufferCapacityInFrames / pConfig->periods);
|
((MA_PFN_AAudioStreamBuilder_setFramesPerDataCallback)pContext->aaudio.AAudioStreamBuilder_setFramesPerDataCallback)(pBuilder, bufferCapacityInFrames / pConfig->periods);
|
||||||
|
|
||||||
if (deviceType == ma_device_type_capture) {
|
if (deviceType == ma_device_type_capture) {
|
||||||
|
if (pConfig->aaudio.inputPreset != ma_aaudio_input_preset_default) {
|
||||||
|
((MA_PFN_AAudioStreamBuilder_setInputPreset)pContext->aaudio.AAudioStreamBuilder_setInputPreset)(pBuilder, ma_to_input_preset__aaudio(pConfig->aaudio.inputPreset));
|
||||||
|
}
|
||||||
|
|
||||||
((MA_PFN_AAudioStreamBuilder_setDataCallback)pContext->aaudio.AAudioStreamBuilder_setDataCallback)(pBuilder, ma_stream_data_callback_capture__aaudio, (void*)pDevice);
|
((MA_PFN_AAudioStreamBuilder_setDataCallback)pContext->aaudio.AAudioStreamBuilder_setDataCallback)(pBuilder, ma_stream_data_callback_capture__aaudio, (void*)pDevice);
|
||||||
} else {
|
} else {
|
||||||
|
if (pConfig->aaudio.contentType != ma_aaudio_content_type_default) {
|
||||||
|
((MA_PFN_AAudioStreamBuilder_setContentType)pContext->aaudio.AAudioStreamBuilder_setContentType)(pBuilder, ma_to_content_type__aaudio(pConfig->aaudio.contentType));
|
||||||
|
}
|
||||||
|
|
||||||
((MA_PFN_AAudioStreamBuilder_setDataCallback)pContext->aaudio.AAudioStreamBuilder_setDataCallback)(pBuilder, ma_stream_data_callback_playback__aaudio, (void*)pDevice);
|
((MA_PFN_AAudioStreamBuilder_setDataCallback)pContext->aaudio.AAudioStreamBuilder_setDataCallback)(pBuilder, ma_stream_data_callback_playback__aaudio, (void*)pDevice);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -29638,6 +29695,8 @@ static ma_result ma_context_init__aaudio(const ma_context_config* pConfig, ma_co
|
|||||||
pContext->aaudio.AAudioStreamBuilder_setDataCallback = (ma_proc)ma_dlsym(pContext, pContext->aaudio.hAAudio, "AAudioStreamBuilder_setDataCallback");
|
pContext->aaudio.AAudioStreamBuilder_setDataCallback = (ma_proc)ma_dlsym(pContext, pContext->aaudio.hAAudio, "AAudioStreamBuilder_setDataCallback");
|
||||||
pContext->aaudio.AAudioStreamBuilder_setErrorCallback = (ma_proc)ma_dlsym(pContext, pContext->aaudio.hAAudio, "AAudioStreamBuilder_setErrorCallback");
|
pContext->aaudio.AAudioStreamBuilder_setErrorCallback = (ma_proc)ma_dlsym(pContext, pContext->aaudio.hAAudio, "AAudioStreamBuilder_setErrorCallback");
|
||||||
pContext->aaudio.AAudioStreamBuilder_setPerformanceMode = (ma_proc)ma_dlsym(pContext, pContext->aaudio.hAAudio, "AAudioStreamBuilder_setPerformanceMode");
|
pContext->aaudio.AAudioStreamBuilder_setPerformanceMode = (ma_proc)ma_dlsym(pContext, pContext->aaudio.hAAudio, "AAudioStreamBuilder_setPerformanceMode");
|
||||||
|
pContext->aaudio.AAudioStreamBuilder_setContentType = (ma_proc)ma_dlsym(pContext, pContext->aaudio.hAAudio, "AAudioStreamBuilder_setContentType");
|
||||||
|
pContext->aaudio.AAudioStreamBuilder_setInputPreset = (ma_proc)ma_dlsym(pContext, pContext->aaudio.hAAudio, "AAudioStreamBuilder_setInputPreset");
|
||||||
pContext->aaudio.AAudioStreamBuilder_openStream = (ma_proc)ma_dlsym(pContext, pContext->aaudio.hAAudio, "AAudioStreamBuilder_openStream");
|
pContext->aaudio.AAudioStreamBuilder_openStream = (ma_proc)ma_dlsym(pContext, pContext->aaudio.hAAudio, "AAudioStreamBuilder_openStream");
|
||||||
pContext->aaudio.AAudioStream_close = (ma_proc)ma_dlsym(pContext, pContext->aaudio.hAAudio, "AAudioStream_close");
|
pContext->aaudio.AAudioStream_close = (ma_proc)ma_dlsym(pContext, pContext->aaudio.hAAudio, "AAudioStream_close");
|
||||||
pContext->aaudio.AAudioStream_getState = (ma_proc)ma_dlsym(pContext, pContext->aaudio.hAAudio, "AAudioStream_getState");
|
pContext->aaudio.AAudioStream_getState = (ma_proc)ma_dlsym(pContext, pContext->aaudio.hAAudio, "AAudioStream_getState");
|
||||||
|
|||||||
Reference in New Issue
Block a user