From 35f8e0698fa4de79263e726be553a3d79b35d531 Mon Sep 17 00:00:00 2001 From: Priyanshu Desai Date: Thu, 20 Mar 2025 19:19:34 +0530 Subject: [PATCH] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Fix=20calling=20preparePl?= =?UTF-8?q?ayer=20again=20does=20not=20cancel=20old=20waveform=20extractio?= =?UTF-8?q?n=20(#328):=20bug=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 5 +++++ .../main/kotlin/com/simform/audio_waveforms/AudioPlayer.kt | 4 +++- .../com/simform/audio_waveforms/AudioWaveformsPlugin.kt | 4 ++-- .../kotlin/com/simform/audio_waveforms/WaveformExtractor.kt | 4 ---- ios/Classes/AudioPlayer.swift | 2 ++ 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d370d7a..8b25dc7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## 2.0.0 (Unreleased) + +- Fixed [#350](https://github.com/SimformSolutionsPvtLtd/audio_waveforms/issues/350) - Left most visible wave is clipped in half when recording. +- **BREAKING:** Fixed [#412](https://github.com/SimformSolutionsPvtLtd/audio_waveforms/issues/412) - Calling preparePlayer again does not cancel old waveform extraction. + ## 1.3.0 - Fixed [#386](https://github.com/SimformSolutionsPvtLtd/audio_waveforms/pull/386) - On permission denied isRecording flag changed diff --git a/android/src/main/kotlin/com/simform/audio_waveforms/AudioPlayer.kt b/android/src/main/kotlin/com/simform/audio_waveforms/AudioPlayer.kt index 2f5f76d5..ab0cf4b0 100644 --- a/android/src/main/kotlin/com/simform/audio_waveforms/AudioPlayer.kt +++ b/android/src/main/kotlin/com/simform/audio_waveforms/AudioPlayer.kt @@ -38,8 +38,10 @@ class AudioPlayer( } val uri = Uri.parse(path) val mediaItem = MediaItem.fromUri(uri) + stop() + player?.clearMediaItems() player = ExoPlayer.Builder(appContext).build() - player?.addMediaItem(mediaItem) + player?.setMediaItem(mediaItem) player?.prepare() playerListener = object : Player.Listener { diff --git a/android/src/main/kotlin/com/simform/audio_waveforms/AudioWaveformsPlugin.kt b/android/src/main/kotlin/com/simform/audio_waveforms/AudioWaveformsPlugin.kt index 9d5ca1d3..3ff5981d 100644 --- a/android/src/main/kotlin/com/simform/audio_waveforms/AudioWaveformsPlugin.kt +++ b/android/src/main/kotlin/com/simform/audio_waveforms/AudioWaveformsPlugin.kt @@ -268,7 +268,7 @@ class AudioWaveformsPlugin : FlutterPlugin, MethodCallHandler, ActivityAware { } private fun initPlayer(playerKey: String) { - if (audioPlayers[playerKey] == null) { + if (!audioPlayers.containsKey(playerKey)) { val newPlayer = AudioPlayer( context = applicationContext, channel = channel, @@ -289,6 +289,7 @@ class AudioWaveformsPlugin : FlutterPlugin, MethodCallHandler, ActivityAware { result.error(Constants.LOG_TAG, "Path can't be null", "") return } + extractors[playerKey]?.stop() extractors[playerKey] = WaveformExtractor( context = applicationContext, methodChannel = channel, @@ -306,7 +307,6 @@ class AudioWaveformsPlugin : FlutterPlugin, MethodCallHandler, ActivityAware { } ) extractors[playerKey]?.startDecode() - extractors[playerKey]?.stop() } override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) { diff --git a/android/src/main/kotlin/com/simform/audio_waveforms/WaveformExtractor.kt b/android/src/main/kotlin/com/simform/audio_waveforms/WaveformExtractor.kt index 8c4c1062..30f72b38 100644 --- a/android/src/main/kotlin/com/simform/audio_waveforms/WaveformExtractor.kt +++ b/android/src/main/kotlin/com/simform/audio_waveforms/WaveformExtractor.kt @@ -28,8 +28,6 @@ class WaveformExtractor( private var progress = 0F private var currentProgress = 0F - @Volatile - private var started = false private val finishCount = CountDownLatch(1) private var inputEof = false private var sampleRate = 0 @@ -234,8 +232,6 @@ class WaveformExtractor( } fun stop() { - if (!started) return - started = false decoder?.stop() decoder?.release() extractor?.release() diff --git a/ios/Classes/AudioPlayer.swift b/ios/Classes/AudioPlayer.swift index f95b1938..1b7e6aec 100644 --- a/ios/Classes/AudioPlayer.swift +++ b/ios/Classes/AudioPlayer.swift @@ -29,6 +29,8 @@ class AudioPlayer: NSObject, AVAudioPlayerDelegate { return } do { + stopPlayer() + player = nil player = try AVAudioPlayer(contentsOf: audioUrl!) do { if overrideAudioSession {