same fix for android: when there are 0 in/out audio channels, use ma anyways with a fake output channel
This commit is contained in:
parent
16ed63107f
commit
2d3f850ca0
@ -16,23 +16,21 @@
|
|||||||
#if PARAMETERS_N > 0
|
#if PARAMETERS_N > 0
|
||||||
# include <algorithm>
|
# include <algorithm>
|
||||||
#endif
|
#endif
|
||||||
#if NUM_CHANNELS_IN + NUM_CHANNELS_OUT > 0
|
|
||||||
# define MINIAUDIO_IMPLEMENTATION
|
# define MINIAUDIO_IMPLEMENTATION
|
||||||
# define MA_ENABLE_ONLY_SPECIFIC_BACKENDS
|
# define MA_ENABLE_ONLY_SPECIFIC_BACKENDS
|
||||||
# define MA_ENABLE_AAUDIO
|
# define MA_ENABLE_AAUDIO
|
||||||
# include <miniaudio.h>
|
# include <miniaudio.h>
|
||||||
|
|
||||||
# define BLOCK_SIZE 32
|
# define BLOCK_SIZE 32
|
||||||
#endif
|
|
||||||
#if NUM_MIDI_INPUTS > 0
|
#if NUM_MIDI_INPUTS > 0
|
||||||
# include <vector>
|
# include <vector>
|
||||||
|
|
||||||
# include <amidi/AMidi.h>
|
# include <amidi/AMidi.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if NUM_CHANNELS_IN + NUM_CHANNELS_OUT > 0
|
|
||||||
static ma_device device;
|
static ma_device device;
|
||||||
#endif
|
|
||||||
static plugin instance;
|
static plugin instance;
|
||||||
static void * mem;
|
static void * mem;
|
||||||
#if (NUM_NON_OPT_CHANNELS_IN > NUM_CHANNELS_IN) || (NUM_NON_OPT_CHANNELS_OUT > NUM_CHANNELS_OUT)
|
#if (NUM_NON_OPT_CHANNELS_IN > NUM_CHANNELS_IN) || (NUM_NON_OPT_CHANNELS_OUT > NUM_CHANNELS_OUT)
|
||||||
@ -103,6 +101,7 @@ static void data_callback(ma_device* pDevice, void* pOutput, const void* pInput,
|
|||||||
|
|
||||||
const float * in_buf = reinterpret_cast<const float *>(pInput);
|
const float * in_buf = reinterpret_cast<const float *>(pInput);
|
||||||
float * out_buf = reinterpret_cast<float *>(pOutput);
|
float * out_buf = reinterpret_cast<float *>(pOutput);
|
||||||
|
#if NUM_CHANNELS_IN + NUM_CHANNELS_OUT > 0
|
||||||
ma_uint32 i = 0;
|
ma_uint32 i = 0;
|
||||||
#if NUM_CHANNELS_IN > 0
|
#if NUM_CHANNELS_IN > 0
|
||||||
size_t ix = 0;
|
size_t ix = 0;
|
||||||
@ -133,6 +132,10 @@ static void data_callback(ma_device* pDevice, void* pOutput, const void* pInput,
|
|||||||
|
|
||||||
i += n;
|
i += n;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
for (ma_uint32 i = 0; i < frameCount; i++)
|
||||||
|
out_buf[i] = 0.f; // Unique fake channel
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
@ -149,6 +152,10 @@ JNI_FUNC(nativeAudioStart)(JNIEnv* env, jobject thiz) {
|
|||||||
# else
|
# else
|
||||||
ma_device_config deviceConfig = ma_device_config_init(ma_device_type_duplex);
|
ma_device_config deviceConfig = ma_device_config_init(ma_device_type_duplex);
|
||||||
# endif
|
# endif
|
||||||
|
#else
|
||||||
|
ma_device_config deviceConfig = ma_device_config_init(ma_device_type_playback);
|
||||||
|
#endif
|
||||||
|
|
||||||
deviceConfig.periodSizeInFrames = BLOCK_SIZE;
|
deviceConfig.periodSizeInFrames = BLOCK_SIZE;
|
||||||
deviceConfig.periods = 1;
|
deviceConfig.periods = 1;
|
||||||
deviceConfig.performanceProfile = ma_performance_profile_low_latency;
|
deviceConfig.performanceProfile = ma_performance_profile_low_latency;
|
||||||
@ -163,12 +170,15 @@ JNI_FUNC(nativeAudioStart)(JNIEnv* env, jobject thiz) {
|
|||||||
deviceConfig.capture.shareMode = ma_share_mode_shared;
|
deviceConfig.capture.shareMode = ma_share_mode_shared;
|
||||||
deviceConfig.playback.pDeviceID = NULL;
|
deviceConfig.playback.pDeviceID = NULL;
|
||||||
deviceConfig.playback.format = ma_format_f32;
|
deviceConfig.playback.format = ma_format_f32;
|
||||||
|
#if NUM_CHANNELS_IN + NUM_CHANNELS_OUT > 0
|
||||||
deviceConfig.playback.channels = NUM_CHANNELS_OUT;
|
deviceConfig.playback.channels = NUM_CHANNELS_OUT;
|
||||||
|
#else
|
||||||
|
deviceConfig.playback.channels = 1; // Fake & muted
|
||||||
|
#endif
|
||||||
deviceConfig.playback.shareMode = ma_share_mode_shared;
|
deviceConfig.playback.shareMode = ma_share_mode_shared;
|
||||||
|
|
||||||
if (ma_device_init(NULL, &deviceConfig, &device) != MA_SUCCESS)
|
if (ma_device_init(NULL, &deviceConfig, &device) != MA_SUCCESS)
|
||||||
return false;
|
return false;
|
||||||
#endif
|
|
||||||
|
|
||||||
plugin_init(&instance);
|
plugin_init(&instance);
|
||||||
|
|
||||||
@ -186,9 +196,7 @@ JNI_FUNC(nativeAudioStart)(JNIEnv* env, jobject thiz) {
|
|||||||
mem = malloc(req);
|
mem = malloc(req);
|
||||||
if (mem == NULL) {
|
if (mem == NULL) {
|
||||||
plugin_fini(&instance);
|
plugin_fini(&instance);
|
||||||
#if NUM_CHANNELS_IN + NUM_CHANNELS_OUT > 0
|
|
||||||
ma_device_uninit(&device);
|
ma_device_uninit(&device);
|
||||||
#endif
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
plugin_mem_set(&instance, mem);
|
plugin_mem_set(&instance, mem);
|
||||||
@ -250,14 +258,12 @@ JNI_FUNC(nativeAudioStart)(JNIEnv* env, jobject thiz) {
|
|||||||
y = NULL;
|
y = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if NUM_CHANNELS_IN + NUM_CHANNELS_OUT > 0
|
|
||||||
if (ma_device_start(&device) != MA_SUCCESS) {
|
if (ma_device_start(&device) != MA_SUCCESS) {
|
||||||
if (mem != NULL)
|
if (mem != NULL)
|
||||||
free(mem);
|
free(mem);
|
||||||
ma_device_uninit(&device);
|
ma_device_uninit(&device);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -267,10 +273,8 @@ JNIEXPORT void JNICALL
|
|||||||
JNI_FUNC(nativeAudioStop)(JNIEnv* env, jobject thiz) {
|
JNI_FUNC(nativeAudioStop)(JNIEnv* env, jobject thiz) {
|
||||||
(void)env;
|
(void)env;
|
||||||
(void)thiz;
|
(void)thiz;
|
||||||
#if NUM_CHANNELS_IN + NUM_CHANNELS_OUT > 0
|
|
||||||
ma_device_stop(&device);
|
ma_device_stop(&device);
|
||||||
ma_device_uninit(&device);
|
ma_device_uninit(&device);
|
||||||
#endif
|
|
||||||
if (mem != NULL)
|
if (mem != NULL)
|
||||||
free(mem);
|
free(mem);
|
||||||
plugin_fini(&instance);
|
plugin_fini(&instance);
|
||||||
|
Loading…
Reference in New Issue
Block a user