From a6fd39708187f6381197b888d2f46056a8733307 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Thu, 16 Jan 2025 19:20:59 +0530 Subject: [PATCH 1/2] Minor code improvement --- .../kotlin/org/fossify/voicerecorder/recorder/Mp3Recorder.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/voicerecorder/recorder/Mp3Recorder.kt b/app/src/main/kotlin/org/fossify/voicerecorder/recorder/Mp3Recorder.kt index d4b23a01..04ec35bf 100644 --- a/app/src/main/kotlin/org/fossify/voicerecorder/recorder/Mp3Recorder.kt +++ b/app/src/main/kotlin/org/fossify/voicerecorder/recorder/Mp3Recorder.kt @@ -64,7 +64,7 @@ class Mp3Recorder(val context: Context) : Recorder { return } - val androidLame = LameBuilder() + androidLame = LameBuilder() .setInSampleRate(SAMPLE_RATE) .setOutBitrate(context.config.bitrate / 1000) .setOutSampleRate(SAMPLE_RATE) @@ -83,7 +83,7 @@ class Mp3Recorder(val context: Context) : Recorder { if (!isPaused.get()) { val count = audioRecord.read(rawData, 0, minBufferSize) if (count > 0) { - val encoded = androidLame.encode(rawData, rawData, count, mp3buffer) + val encoded = androidLame!!.encode(rawData, rawData, count, mp3buffer) if (encoded > 0) { try { updateAmplitude(rawData) From 95f13fc32a69294b4472bbd6cb143d1904f3b571 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Thu, 16 Jan 2025 21:42:38 +0530 Subject: [PATCH 2/2] Wrap file descriptor in parcel file descriptor Closes https://github.com/FossifyOrg/Voice-Recorder/issues/81 --- .../voicerecorder/recorder/MediaRecorderWrapper.kt | 7 ++++--- .../fossify/voicerecorder/recorder/Mp3Recorder.kt | 12 +++++++----- .../org/fossify/voicerecorder/recorder/Recorder.kt | 4 ++-- .../voicerecorder/services/RecorderService.kt | 14 ++++---------- 4 files changed, 17 insertions(+), 20 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/voicerecorder/recorder/MediaRecorderWrapper.kt b/app/src/main/kotlin/org/fossify/voicerecorder/recorder/MediaRecorderWrapper.kt index b1b4d261..d02b1268 100644 --- a/app/src/main/kotlin/org/fossify/voicerecorder/recorder/MediaRecorderWrapper.kt +++ b/app/src/main/kotlin/org/fossify/voicerecorder/recorder/MediaRecorderWrapper.kt @@ -3,9 +3,9 @@ package org.fossify.voicerecorder.recorder import android.annotation.SuppressLint import android.content.Context import android.media.MediaRecorder +import android.os.ParcelFileDescriptor import org.fossify.voicerecorder.extensions.config import org.fossify.voicerecorder.helpers.SAMPLE_RATE -import java.io.FileDescriptor class MediaRecorderWrapper(val context: Context) : Recorder { @@ -22,8 +22,9 @@ class MediaRecorderWrapper(val context: Context) : Recorder { recorder.setOutputFile(path) } - override fun setOutputFile(fileDescriptor: FileDescriptor) { - recorder.setOutputFile(fileDescriptor) + override fun setOutputFile(parcelFileDescriptor: ParcelFileDescriptor) { + val pFD = ParcelFileDescriptor.dup(parcelFileDescriptor.fileDescriptor) + recorder.setOutputFile(pFD.fileDescriptor) } override fun prepare() { diff --git a/app/src/main/kotlin/org/fossify/voicerecorder/recorder/Mp3Recorder.kt b/app/src/main/kotlin/org/fossify/voicerecorder/recorder/Mp3Recorder.kt index 04ec35bf..0688ca89 100644 --- a/app/src/main/kotlin/org/fossify/voicerecorder/recorder/Mp3Recorder.kt +++ b/app/src/main/kotlin/org/fossify/voicerecorder/recorder/Mp3Recorder.kt @@ -4,6 +4,7 @@ import android.annotation.SuppressLint import android.content.Context import android.media.AudioFormat import android.media.AudioRecord +import android.os.ParcelFileDescriptor import com.naman14.androidlame.AndroidLame import com.naman14.androidlame.LameBuilder import org.fossify.commons.extensions.showErrorToast @@ -11,7 +12,6 @@ import org.fossify.commons.helpers.ensureBackgroundThread import org.fossify.voicerecorder.extensions.config import org.fossify.voicerecorder.helpers.SAMPLE_RATE import java.io.File -import java.io.FileDescriptor import java.io.FileNotFoundException import java.io.FileOutputStream import java.io.IOException @@ -26,7 +26,7 @@ class Mp3Recorder(val context: Context) : Recorder { private var amplitude = AtomicInteger(0) private var outputPath: String? = null private var androidLame: AndroidLame? = null - private var fileDescriptor: FileDescriptor? = null + private var fileDescriptor: ParcelFileDescriptor? = null private var outputStream: FileOutputStream? = null private val minBufferSize = AudioRecord.getMinBufferSize( SAMPLE_RATE, @@ -55,7 +55,7 @@ class Mp3Recorder(val context: Context) : Recorder { outputStream = try { if (fileDescriptor != null) { - FileOutputStream(fileDescriptor) + FileOutputStream(fileDescriptor!!.fileDescriptor) } else { FileOutputStream(File(outputPath!!)) } @@ -101,6 +101,7 @@ class Mp3Recorder(val context: Context) : Recorder { override fun stop() { isPaused.set(true) isStopped.set(true) + audioRecord.stop() } override fun pause() { @@ -114,14 +115,15 @@ class Mp3Recorder(val context: Context) : Recorder { override fun release() { androidLame?.flush(mp3buffer) outputStream?.close() + audioRecord.release() } override fun getMaxAmplitude(): Int { return amplitude.get() } - override fun setOutputFile(fileDescriptor: FileDescriptor) { - this.fileDescriptor = fileDescriptor + override fun setOutputFile(parcelFileDescriptor: ParcelFileDescriptor) { + this.fileDescriptor = ParcelFileDescriptor.dup(parcelFileDescriptor.fileDescriptor) } private fun updateAmplitude(data: ShortArray) { diff --git a/app/src/main/kotlin/org/fossify/voicerecorder/recorder/Recorder.kt b/app/src/main/kotlin/org/fossify/voicerecorder/recorder/Recorder.kt index 93f0cdb7..06a938c0 100644 --- a/app/src/main/kotlin/org/fossify/voicerecorder/recorder/Recorder.kt +++ b/app/src/main/kotlin/org/fossify/voicerecorder/recorder/Recorder.kt @@ -1,10 +1,10 @@ package org.fossify.voicerecorder.recorder -import java.io.FileDescriptor +import android.os.ParcelFileDescriptor interface Recorder { fun setOutputFile(path: String) - fun setOutputFile(fileDescriptor: FileDescriptor) + fun setOutputFile(parcelFileDescriptor: ParcelFileDescriptor) fun prepare() fun start() fun stop() diff --git a/app/src/main/kotlin/org/fossify/voicerecorder/services/RecorderService.kt b/app/src/main/kotlin/org/fossify/voicerecorder/services/RecorderService.kt index cb8d6bd6..2ff795a8 100644 --- a/app/src/main/kotlin/org/fossify/voicerecorder/services/RecorderService.kt +++ b/app/src/main/kotlin/org/fossify/voicerecorder/services/RecorderService.kt @@ -113,19 +113,13 @@ class RecorderService : Service() { if (isRPlus()) { val fileUri = createDocumentUriUsingFirstParentTreeUri(recordingFile) createSAFFileSdk30(recordingFile) - - val outputFileDescriptor = - contentResolver.openFileDescriptor(fileUri, "w")!!.fileDescriptor - - recorder?.setOutputFile(outputFileDescriptor) + contentResolver.openFileDescriptor(fileUri, "w")!! + .use { recorder?.setOutputFile(it) } } else if (isPathOnSD(recordingFile)) { var document = getDocumentFile(recordingFile.getParentPath()) document = document?.createFile("", recordingFile.getFilenameFromPath()) - - val outputFileDescriptor = - contentResolver.openFileDescriptor(document!!.uri, "w")!!.fileDescriptor - - recorder?.setOutputFile(outputFileDescriptor) + contentResolver.openFileDescriptor(document!!.uri, "w")!! + .use { recorder?.setOutputFile(it) } } else { recorder?.setOutputFile(recordingFile) }