tentative ios fix background audio pause/resume
This commit is contained in:
parent
ff8a589019
commit
a2ffd4611b
@ -20,5 +20,7 @@
|
|||||||
|
|
||||||
char audioStart();
|
char audioStart();
|
||||||
void audioStop();
|
void audioStop();
|
||||||
|
void audioPause();
|
||||||
|
void audioResume();
|
||||||
void setParameter(int i, float v);
|
void setParameter(int i, float v);
|
||||||
float getParameter(int i);
|
float getParameter(int i);
|
||||||
|
@ -97,6 +97,12 @@ struct templateApp: App {
|
|||||||
var body: some Scene {
|
var body: some Scene {
|
||||||
WindowGroup {
|
WindowGroup {
|
||||||
ContentView()
|
ContentView()
|
||||||
|
.onReceive(NotificationCenter.default.publisher(for: UIApplication.didEnterBackgroundNotification)) { _ in
|
||||||
|
audioPause()
|
||||||
|
}
|
||||||
|
.onReceive(NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)) { _ in
|
||||||
|
audioResume()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,8 @@
|
|||||||
#define BLOCK_SIZE 32
|
#define BLOCK_SIZE 32
|
||||||
|
|
||||||
static ma_device device;
|
static ma_device device;
|
||||||
|
static ma_device_config deviceConfig;
|
||||||
|
char device_inited = 0;
|
||||||
static plugin instance;
|
static plugin instance;
|
||||||
static void * mem;
|
static void * mem;
|
||||||
#if NUM_NON_OPT_CHANNELS_IN > NUM_CHANNELS_IN
|
#if NUM_NON_OPT_CHANNELS_IN > NUM_CHANNELS_IN
|
||||||
@ -189,14 +191,14 @@ extern "C"
|
|||||||
char audioStart() {
|
char audioStart() {
|
||||||
#if NUM_CHANNELS_IN + NUM_CHANNELS_OUT > 0
|
#if NUM_CHANNELS_IN + NUM_CHANNELS_OUT > 0
|
||||||
# if NUM_CHANNELS_IN == 0
|
# if NUM_CHANNELS_IN == 0
|
||||||
ma_device_config deviceConfig = ma_device_config_init(ma_device_type_playback);
|
deviceConfig = ma_device_config_init(ma_device_type_playback);
|
||||||
# elif NUM_CHANNELS_OUT == 0
|
# elif NUM_CHANNELS_OUT == 0
|
||||||
ma_device_config deviceConfig = ma_device_config_init(ma_device_type_capture);
|
deviceConfig = ma_device_config_init(ma_device_type_capture);
|
||||||
# else
|
# else
|
||||||
ma_device_config deviceConfig = ma_device_config_init(ma_device_type_duplex);
|
deviceConfig = ma_device_config_init(ma_device_type_duplex);
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
ma_device_config deviceConfig = ma_device_config_init(ma_device_type_playback);
|
deviceConfig = ma_device_config_init(ma_device_type_playback);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
deviceConfig.periodSizeInFrames = BLOCK_SIZE;
|
deviceConfig.periodSizeInFrames = BLOCK_SIZE;
|
||||||
@ -328,6 +330,9 @@ char audioStart() {
|
|||||||
ma_device_uninit(&device);
|
ma_device_uninit(&device);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
device_inited = 1;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -341,6 +346,23 @@ void audioStop() {
|
|||||||
// No need to close MIDI connections (e.g. via MIDIClientDispose), the system terminates them when the app terminates.
|
// No need to close MIDI connections (e.g. via MIDIClientDispose), the system terminates them when the app terminates.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
void audioPause() {
|
||||||
|
if (device_inited) {
|
||||||
|
ma_device_stop(&device);
|
||||||
|
ma_device_uninit(&device);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
void audioResume() {
|
||||||
|
// TODO: couldn't this could fail?...
|
||||||
|
if (device_inited) {
|
||||||
|
ma_device_init(NULL, &deviceConfig, &device);
|
||||||
|
ma_device_start(&device);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
float getParameter(int i) {
|
float getParameter(int i) {
|
||||||
#if PARAMETERS_N > 0
|
#if PARAMETERS_N > 0
|
||||||
|
Loading…
Reference in New Issue
Block a user