From c6847e58c3f575460f07384abd3869ed21c8b1d3 Mon Sep 17 00:00:00 2001 From: Andrew Betts Date: Sun, 17 Feb 2019 16:16:52 -0500 Subject: [PATCH] add recording for duration --- .../rnim/rn/audio/AudioRecorderManager.java | 38 +++++++++++++++++++ ios/AudioRecorderManager.m | 7 ++++ 2 files changed, 45 insertions(+) diff --git a/android/src/main/java/com/rnim/rn/audio/AudioRecorderManager.java b/android/src/main/java/com/rnim/rn/audio/AudioRecorderManager.java index f6cecf65..a93ca483 100644 --- a/android/src/main/java/com/rnim/rn/audio/AudioRecorderManager.java +++ b/android/src/main/java/com/rnim/rn/audio/AudioRecorderManager.java @@ -145,6 +145,44 @@ public void prepareRecordingAtPath(String recordingPath, ReadableMap recordingSe } + @ReactMethod + public void prepareRecordingForDuration(String recordingPath, ReadableMap recordingSettings, int duration, Promise promise) { + if (isRecording){ + logAndRejectPromise(promise, "INVALID_STATE", "Please call stopRecording before starting recording"); + } + File destFile = new File(recordingPath); + if (destFile.getParentFile() != null) { + destFile.getParentFile().mkdirs(); + } + recorder = new MediaRecorder(); + try { + recorder.setAudioSource(recordingSettings.getInt("AudioSource")); + int outputFormat = getOutputFormatFromString(recordingSettings.getString("OutputFormat")); + recorder.setOutputFormat(outputFormat); + recorder.setMaxDuration(duration*1000); + int audioEncoder = getAudioEncoderFromString(recordingSettings.getString("AudioEncoding")); + recorder.setAudioEncoder(audioEncoder); + recorder.setAudioSamplingRate(recordingSettings.getInt("SampleRate")); + recorder.setAudioChannels(recordingSettings.getInt("Channels")); + recorder.setAudioEncodingBitRate(recordingSettings.getInt("AudioEncodingBitRate")); + recorder.setOutputFile(destFile.getPath()); + includeBase64 = recordingSettings.getBoolean("IncludeBase64"); + } + catch(final Exception e) { + logAndRejectPromise(promise, "COULDNT_CONFIGURE_MEDIA_RECORDER" , "Make sure you've added RECORD_AUDIO permission to your AndroidManifest.xml file "+e.getMessage()); + return; + } + + currentOutputFile = recordingPath; + try { + recorder.prepare(); + promise.resolve(currentOutputFile); + } catch (final Exception e) { + logAndRejectPromise(promise, "COULDNT_PREPARE_RECORDING_AT_PATH "+recordingPath, e.getMessage()); + } + + } + private int getAudioEncoderFromString(String audioEncoder) { switch (audioEncoder) { case "aac": diff --git a/ios/AudioRecorderManager.m b/ios/AudioRecorderManager.m index 5fdeb1c1..d8e128e5 100644 --- a/ios/AudioRecorderManager.m +++ b/ios/AudioRecorderManager.m @@ -242,6 +242,13 @@ - (NSString *) applicationDocumentsDirectory [_audioRecorder record]; } +RCT_EXPORT_METHOD(startRecordForDuration: (NSTimeInterval)time) +{ + [self startProgressTimer]; + [_recordSession setActive:YES error:nil]; + [_audioRecorder recordForDuration: time]; +} + RCT_EXPORT_METHOD(stopRecording) { [_audioRecorder stop];