[Android] Start recording immediately after asking for permission

This commit is contained in:
Florin9doi 2020-10-24 12:03:43 +03:00
parent 9379fe1399
commit a42f5234c5
5 changed files with 31 additions and 10 deletions

View File

@ -34,18 +34,27 @@ AndroidAudioState *AndroidAudio_Init(AndroidAudioCallback callback, int optimalF
return state;
}
bool AndroidAudio_Recording_Start(AndroidAudioState *state, int sampleRate) {
bool AndroidAudio_Recording_SetSampleRate(AndroidAudioState *state, int sampleRate) {
if (!state) {
ERROR_LOG(AUDIO, "AndroidAudioState not initialized, cannot set recording sample rate");
return false;
}
state->input_sample_rate = sampleRate;
INFO_LOG(AUDIO, "AndroidAudio_Recording_SetSampleRate");
return true;
}
bool AndroidAudio_Recording_Start(AndroidAudioState *state) {
if (!state) {
ERROR_LOG(AUDIO, "AndroidAudioState not initialized, cannot start recording!");
return false;
}
state->input_enable = 1;
if (!state->ctx) {
ERROR_LOG(AUDIO, "OpenSLContext not initialized, cannot start recording!");
return false;
}
state->input_enable = 1;
state->input_sample_rate = sampleRate;
state->ctx->AudioRecord_Start(sampleRate);
state->ctx->AudioRecord_Start(state->input_sample_rate);
INFO_LOG(AUDIO, "AndroidAudio_Recording_Start");
return true;
}

View File

@ -23,7 +23,8 @@ struct AndroidAudioState;
// It's okay for optimalFramesPerBuffer and optimalSampleRate to be 0. Defaults will be used.
AndroidAudioState *AndroidAudio_Init(AndroidAudioCallback cb, int optimalFramesPerBuffer, int optimalSampleRate);
bool AndroidAudio_Recording_Start(AndroidAudioState *state, int sampleRate);
bool AndroidAudio_Recording_SetSampleRate(AndroidAudioState *state, int sampleRate);
bool AndroidAudio_Recording_Start(AndroidAudioState *state);
bool AndroidAudio_Recording_Stop(AndroidAudioState *state);
bool AndroidAudio_Pause(AndroidAudioState *state);
bool AndroidAudio_Resume(AndroidAudioState *state);

View File

@ -678,8 +678,12 @@ extern "C" void Java_org_ppsspp_ppsspp_NativeApp_audioShutdown(JNIEnv *, jclass)
}
}
extern "C" void Java_org_ppsspp_ppsspp_NativeApp_audioRecording_1Start(JNIEnv *, jclass, jint sampleRate) {
AndroidAudio_Recording_Start(g_audioState, sampleRate);
extern "C" void Java_org_ppsspp_ppsspp_NativeApp_audioRecording_1SetSampleRate(JNIEnv *, jclass, jint sampleRate) {
AndroidAudio_Recording_SetSampleRate(g_audioState, sampleRate);
}
extern "C" void Java_org_ppsspp_ppsspp_NativeApp_audioRecording_1Start(JNIEnv *, jclass) {
AndroidAudio_Recording_Start(g_audioState);
}
extern "C" void Java_org_ppsspp_ppsspp_NativeApp_audioRecording_1Stop(JNIEnv *, jclass) {

View File

@ -228,6 +228,11 @@ public abstract class NativeActivity extends Activity {
mCameraHelper.startCamera();
}
break;
case REQUEST_CODE_MICROPHONE_PERMISSION:
if (permissionsGranted(permissions, grantResults)) {
NativeApp.audioRecording_Start();
}
break;
default:
}
}
@ -1295,9 +1300,10 @@ public abstract class NativeActivity extends Activity {
}
} else if (command.equals("microphone_command")) {
if (params.startsWith("startRecording:")) {
int sampleRate = Integer.parseInt(params.replace("startRecording:", ""));
NativeApp.audioRecording_SetSampleRate(sampleRate);
if (!askForPermissions(permissionsForMicrophone, REQUEST_CODE_MICROPHONE_PERMISSION)) {
int sampleRate = Integer.valueOf(params.replace("startRecording:", ""));
NativeApp.audioRecording_Start(sampleRate);
NativeApp.audioRecording_Start();
}
} else if (params.equals("stopRecording")) {
NativeApp.audioRecording_Stop();

View File

@ -17,7 +17,8 @@ public class NativeApp {
public static native void audioShutdown();
public static native void audioConfig(int optimalFramesPerBuffer, int optimalSampleRate);
public static native void audioRecording_Start(int sampleRate);
public static native void audioRecording_SetSampleRate(int sampleRate);
public static native void audioRecording_Start();
public static native void audioRecording_Stop();
public static native void computeDesiredBackbufferDimensions();