From 375f54f00dba18e4a0a3f9b72b4ddf18758db679 Mon Sep 17 00:00:00 2001 From: Daniel Fernando Rico Date: Wed, 26 Jun 2024 10:47:12 -0500 Subject: [PATCH] feat: add support to change playback speed --- .../RNAudioRecorderPlayerModule.kt | 10 ++++++++++ index.ts | 9 +++++++++ ios/RNAudioRecorderPlayer.m | 4 ++++ ios/RNAudioRecorderPlayer.swift | 15 +++++++++++++++ 4 files changed, 38 insertions(+) diff --git a/android/src/main/java/com/dooboolab.audiorecorderplayer/RNAudioRecorderPlayerModule.kt b/android/src/main/java/com/dooboolab.audiorecorderplayer/RNAudioRecorderPlayerModule.kt index 3624b9fa..037cc42b 100644 --- a/android/src/main/java/com/dooboolab.audiorecorderplayer/RNAudioRecorderPlayerModule.kt +++ b/android/src/main/java/com/dooboolab.audiorecorderplayer/RNAudioRecorderPlayerModule.kt @@ -194,6 +194,16 @@ class RNAudioRecorderPlayerModule(private val reactContext: ReactApplicationCont promise.resolve("set volume") } + @ReactMethod + fun setPlaybackSpeed(playbackSpeed: Float, promise: Promise) { + if (mediaPlayer == null) { + promise.reject("setPlaybackSpeed", "player is null.") + return + } + mediaPlayer!!.playbackParams = mediaPlayer!!.playbackParams.setSpeed(playbackSpeed) + promise.resolve("setPlaybackSpeed") + } + @ReactMethod fun startPlayer(path: String, httpHeaders: ReadableMap?, promise: Promise) { if (mediaPlayer != null) { diff --git a/index.ts b/index.ts index 0f80fbf0..752b9a3b 100644 --- a/index.ts +++ b/index.ts @@ -420,6 +420,15 @@ class AudioRecorderPlayer { return RNAudioRecorderPlayer.setVolume(volume); }; + /** + * Set playback speed. + * @param {number} setPlaybackSpeed set playback speed. + * @returns {Promise} + */ + setPlaybackSpeed = async (playbackSpeed: number): Promise => { + return RNAudioRecorderPlayer.setPlaybackSpeed(playbackSpeed); + }; + /** * Set subscription duration. Default is 0.5. * @param {number} sec subscription callback duration in seconds. diff --git a/ios/RNAudioRecorderPlayer.m b/ios/RNAudioRecorderPlayer.m index ab011a09..3d9e86cf 100644 --- a/ios/RNAudioRecorderPlayer.m +++ b/ios/RNAudioRecorderPlayer.m @@ -30,6 +30,10 @@ @interface RCT_EXTERN_MODULE(RNAudioRecorderPlayer, RCTEventEmitter) resolve:(RCTPromiseResolveBlock) resolve rejecter:(RCTPromiseRejectBlock) reject); +RCT_EXTERN_METHOD(setPlaybackSpeed:(float)playbackSpeed + resolve:(RCTPromiseResolveBlock) resolve + rejecter:(RCTPromiseRejectBlock) reject); + RCT_EXTERN_METHOD(startPlayer:(NSString*)path httpHeaders:(NSDictionary*)httpHeaders resolve:(RCTPromiseResolveBlock)resolve diff --git a/ios/RNAudioRecorderPlayer.swift b/ios/RNAudioRecorderPlayer.swift index 83a988a0..a95ebeb8 100644 --- a/ios/RNAudioRecorderPlayer.swift +++ b/ios/RNAudioRecorderPlayer.swift @@ -464,6 +464,21 @@ class RNAudioRecorderPlayer: RCTEventEmitter, AVAudioRecorderDelegate { audioPlayer.volume = volume resolve(volume) } + + @objc(setPlaybackSpeed:resolve:rejecter:) + public func setPlaybackSpeed( + playbackSpeed: Float, + resolve: @escaping RCTPromiseResolveBlock, + rejecter reject: @escaping RCTPromiseRejectBlock + ) -> Void { + if (audioPlayer == nil) { + return reject("RNAudioPlayerRecorder", "Player is null", nil) + } + + audioPlayer.rate = playbackSpeed + resolve("setPlaybackSpeed") + } + private func avFormat(fromString encoding: String?) -> AudioFormatID? { if (encoding == nil) { return kAudioFormatAppleLossless