From 60e2c694a1cf82d866708d5dc76a8d8697d74b2e Mon Sep 17 00:00:00 2001 From: Migdonio Rodriguez Date: Wed, 15 Aug 2018 16:10:20 -0500 Subject: [PATCH 1/2] Add metering and progress upload interval configuration in Android --- .../rnim/rn/audio/AudioRecorderManager.java | 21 ++++++++++++++++++- index.js | 3 ++- 2 files changed, 22 insertions(+), 2 deletions(-) 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 56932ed9..1d777e3f 100644 --- a/android/src/main/java/com/rnim/rn/audio/AudioRecorderManager.java +++ b/android/src/main/java/com/rnim/rn/audio/AudioRecorderManager.java @@ -64,6 +64,7 @@ class AudioRecorderManager extends ReactContextBaseJavaModule { private boolean isPauseResumeCapable = false; private Method pauseMethod = null; private Method resumeMethod = null; + private int progressUpdateInterval = 1000; public AudioRecorderManager(ReactApplicationContext reactContext) { @@ -126,6 +127,7 @@ public void prepareRecordingAtPath(String recordingPath, ReadableMap recordingSe recorder.setAudioEncodingBitRate(recordingSettings.getInt("AudioEncodingBitRate")); recorder.setOutputFile(recordingPath); includeBase64 = recordingSettings.getBoolean("IncludeBase64"); + setProgressUpdateInterval(recordingSettings.getInt("ProgressUpdateInterval")); } 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()); @@ -312,10 +314,18 @@ public void run() { if (!isPaused) { WritableMap body = Arguments.createMap(); body.putDouble("currentTime", stopWatch.getTimeSeconds()); + + int amplitude = recorder.getMaxAmplitude(); + if (amplitude == 0) { + body.putInt("currentMetering", -160); + } else { + body.putInt("currentMetering", (int) (20 * Math.log(((double) amplitude) / 32767d))); + } + sendEvent("recordingProgress", body); } } - }, 0, 1000); + }, 0, progressUpdateInterval); } private void stopTimer(){ @@ -336,4 +346,13 @@ private void logAndRejectPromise(Promise promise, String errorCode, String error Log.e(TAG, errorMessage); promise.reject(errorCode, errorMessage); } + + + private void setProgressUpdateInterval(int progressUpdateInterval) { + if(progressUpdateInterval < 100) { + this.progressUpdateInterval = 100; + } else { + this.progressUpdateInterval = progressUpdateInterval; + } + } } diff --git a/index.js b/index.js index dd820fa7..2f16910d 100644 --- a/index.js +++ b/index.js @@ -41,7 +41,8 @@ var AudioRecorder = { MeteringEnabled: false, MeasurementMode: false, AudioEncodingBitRate: 32000, - IncludeBase64: false + IncludeBase64: false, + ProgressUpdateInterval: 1000, }; var recordingOptions = {...defaultOptions, ...options}; From deaa888e88d1866dfaf331986bbec58bd48bf972 Mon Sep 17 00:00:00 2001 From: david nakayama Date: Tue, 30 Oct 2018 18:26:37 -0700 Subject: [PATCH 2/2] Add ios support for custom progressUpdateInterval. --- ios/AudioRecorderManager.m | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ios/AudioRecorderManager.m b/ios/AudioRecorderManager.m index 5fdeb1c1..a36a10a3 100644 --- a/ios/AudioRecorderManager.m +++ b/ios/AudioRecorderManager.m @@ -69,7 +69,6 @@ - (void)stopProgressTimer { } - (void)startProgressTimer { - _progressUpdateInterval = 250; //_prevProgressUpdateTime = nil; [self stopProgressTimer]; @@ -121,7 +120,7 @@ - (NSString *) applicationDocumentsDirectory return basePath; } -RCT_EXPORT_METHOD(prepareRecordingAtPath:(NSString *)path sampleRate:(float)sampleRate channels:(nonnull NSNumber *)channels quality:(NSString *)quality encoding:(NSString *)encoding meteringEnabled:(BOOL)meteringEnabled measurementMode:(BOOL)measurementMode includeBase64:(BOOL)includeBase64) +RCT_EXPORT_METHOD(prepareRecordingAtPath:(NSString *)path sampleRate:(float)sampleRate channels:(nonnull NSNumber *)channels quality:(NSString *)quality encoding:(NSString *)encoding meteringEnabled:(BOOL)meteringEnabled measurementMode:(BOOL)measurementMode includeBase64:(BOOL)includeBase64 progressUpdateInterval:(int)progressUpdateInterval) { _prevProgressUpdateTime = nil; [self stopProgressTimer]; @@ -135,6 +134,12 @@ - (NSString *) applicationDocumentsDirectory _audioSampleRate = [NSNumber numberWithFloat:44100.0]; _meteringEnabled = NO; _includeBase64 = NO; + _progressUpdateInterval = 250; + + // Set default progressUpdateInterval + if (progressUpdateInterval != nil) { + _progressUpdateInterval = progressUpdateInterval; + } // Set audio quality from options if (quality != nil) {