Browse Source

1,停止录制使用统一接口传参数 2, 取消操作后同时删除字幕数据

jsonwang 3 years ago
parent
commit
33c3415eaa

+ 39 - 50
BFRecordScreenKit/Classes/BFVoiceRecordManager.swift

@@ -12,74 +12,62 @@ import Foundation
 class BFVoiceRecordManager: NSObject {
     // 录音相关
     var audioRecorder: BFRecorderManager?
-    // 录音结果回调
+    
+    
+    //录音结束回调
     var endRecordHandle: ((PQVoiceModel?, Error?) -> Void)?
-    var recordHandle: ((PQVoiceModel?, Error?) -> Void)?
+    //录音取消回调
     var cancelRecordHandle: ((PQVoiceModel?) -> Void)?
-
-    var recorderFilePath: String = ""
+    //录音进度回调
+    var recorderProgrossHandle: ((Float64?) -> Void)?
+    //字幕的回调 参数1: 字幕数据 ,参数2 :对应的录音文件
+    var subtitleRecordHandle: ((String?,String?) -> Void)?
+    
+    //开始录制时间
     var beginRecordTime: Date = Date()
+    //音频文件模型
     var voiceModel: PQVoiceModel?
-    ///字幕的回调 参数1: 字幕数据 ,参数2 :对应的录音文件
-    var subtitleRecordHandle: ((String?,String?) -> Void)?
-    //进度回调
- 
-    var recorderProgrossHandle: ((Float64?) -> Void)?
     
     //停止是否为取消操作
-    var isCancel:Bool = false
-
+    var mIsCancel:Bool = false
+    
     /// 初始化方法
     /// - Parameters:
-    ///   - token: NLS
-    ///   - appid: NLS
+    ///   - token: NLS token
+    ///   - appid: NLS appid
     public init(token: String, appid: String) {
         super.init()
         audioRecorder = BFRecorderManager(token, appid: appid)
         audioRecorder?.delegate = self
     }
-
-    /// 录制音频。 index初衷是记录录音顺序,废弃了
-    func startRecord(index: Int) {
-        recorderFilePath = exportAudiosDirectory
-
+    
+    
+    /// 开始录音
+    func startRecord() {
+        var recorderFilePath = exportAudiosDirectory
+        
         if !directoryIsExists(dicPath: recorderFilePath) {
             BFLog(message: "文件夹不存在 \(recorderFilePath)")
             createDirectory(path: recorderFilePath)
         }
-        recorderFilePath.append("recorder_\(index)_\(Date().timeIntervalSince1970).wav")
+        recorderFilePath.append("recorder_\(Date().timeIntervalSince1970).wav")
         BFLog(1, message: "开始录音 \(recorderFilePath)")
-
+        
         BFLog(1, message: "开始录制")
         audioRecorder?.startRecord(recorderFilePath)
         beginRecordTime = Date()
     }
-
-    /// 取消音频录制
-    func cancleRecord() {
-        stopRecord(cancel: true)
+ 
+    /// 停止录制
+    /// - Parameter isCancel: 是否为取消 ,取消操作会把录制的文件删除和字幕删除
+    func stopRecord(isCancel: Bool) {
         
-    }
-
-    /// 结束音频录制
-    func endRecord() {
-        stopRecord(cancel: false)
-    }
-
-    /// 停止录制 1,正常停止 2,取消停止
-    /// - Parameter isCancel: 是否为取消
-     func stopRecord(cancel: Bool) {
-//        if !(audioRecorder?.voiceRecorder.isStarted() ?? false) {
-//            BFLog(message: "不是录制状态")
-//            return
-//        }
-        isCancel = cancel
+        mIsCancel = isCancel
         audioRecorder?.stopRecord()
     }
 }
 
 // MARK: - 录音机回调
-
 extension BFVoiceRecordManager: BFRecorderManagerDelegate {
     public func recorderProgress(_: BFRecorderManager, recoderTime: Double) {
         BFLog(message: "录音机进度:\(recoderTime)")
@@ -90,7 +78,7 @@ extension BFVoiceRecordManager: BFRecorderManagerDelegate {
         let duration = Date().timeIntervalSince(beginRecordTime)
         if duration > 1 {
             
-            if(isCancel){
+            if(mIsCancel){
                 // 删除录制的原文件
                 do {
                     try FileManager.default.removeItem(atPath: outfile)
@@ -109,17 +97,18 @@ extension BFVoiceRecordManager: BFRecorderManagerDelegate {
                     model.wavFilePath = outfile
                     model.duration = "\(duration)"
                     endRecordHandle?(model, nil)
+                    
                 }
-
-    //            // 删除录制的原文件
-    //            do {
-    //                try FileManager.default.removeItem(atPath: outfile)
-    //                print("Success to remove recorder file. \(outfile)")
-    //            } catch {
-    //                print("Failed to remove recorder file. \(outfile)")
-    //            }
+                
+                //            // 删除录制的原文件
+                //            do {
+                //                try FileManager.default.removeItem(atPath: outfile)
+                //                print("Success to remove recorder file. \(outfile)")
+                //            } catch {
+                //                print("Failed to remove recorder file. \(outfile)")
+                //            }
             }
-
+            
         } else {
             cShowHUB(superView: nil, msg: "说话时间太短")
             cancelRecordHandle?(voiceModel)

+ 23 - 11
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -362,7 +362,7 @@ public class BFRecordScreenController: BFBaseViewController {
         NotificationCenter.default.removeObserver(self)
         avplayerTimeObserver?.invalidate()
         if isRecording {
-            recorderManager?.stopRecord(cancel: true)
+            recorderManager?.stopRecord(isCancel: true)
         }
         assetPlayer?.pause()
         recordPlayer?.pause()
@@ -388,13 +388,10 @@ public class BFRecordScreenController: BFBaseViewController {
             BFLog(message: "nls appkey is \(appkey), token is \(token)")
 
             self?.recorderManager = BFVoiceRecordManager(token: token, appid: appkey)
-
-            // 录音取消
-            self?.recorderManager?.cancelRecordHandle = { _ in
-            }
+ 
             // 录音进度
             self?.recorderManager?.recorderProgrossHandle = { [weak self] progress in
-                BFLog(1, message: "curr:录音进度--\(progress) \(self?.recordStartTime) \(self?.isRecording)")
+                BFLog(1, message: "curr:录音进度--\(progress) \(self?.recordStartTime ?? 0) \(self?.isRecording ?? false)")
                 self?.drawProgressIndication(progress: progress ?? 0)
             }
 
@@ -430,7 +427,7 @@ public class BFRecordScreenController: BFBaseViewController {
                     newSubtitle.text = showText
                     newSubtitle.audioFilePath = audioFilePath ?? ""
 
-                    BFLog(message: "添加字幕数据 timelineIn \(newSubtitle.timelineIn) timelineOut \(newSubtitle.timelineOut) text r\(newSubtitle.text) 音频路径为:\(audioFilePath ?? "")")
+                    BFLog(message: "添加字幕数据 timelineIn \(newSubtitle.timelineIn) timelineOut \(newSubtitle.timelineOut) text: \(newSubtitle.text) 音频路径为:\(audioFilePath ?? "")")
                     newSubtitle.setting = self?.subtitleSettingView.subtitle.setting ?? BFSubTitileSettingModel()
 
                     self?.itemModels[self?.currItemModelIndex ?? 0].titleStickers.append(newSubtitle)
@@ -491,7 +488,22 @@ public class BFRecordScreenController: BFBaseViewController {
                     sself.recordStartTime = 0
                 }
             }
-            self?.recorderManager?.cancelRecordHandle = { [weak self] _ in
+            self?.recorderManager?.cancelRecordHandle = { [weak self] voiceModel in
+                //add by ak 取消录制后删除对应字幕数据,这里可恢复操作吗?
+                var subtitleCount = self?.itemModels[self?.currItemModelIndex ?? 0].titleStickers.count ?? 0
+                BFLog(2, message: "删除\(voiceModel?.wavFilePath ?? "")对应的字幕 前 count\(subtitleCount)")
+                if(subtitleCount > 0){
+                    for title in self!.itemModels[self?.currItemModelIndex ?? 0].titleStickers {
+                        if title.audioFilePath == voiceModel?.wavFilePath ?? "" {
+                            if let index = self?.itemModels[self?.currItemModelIndex ?? 0].titleStickers.firstIndex(of: title) {
+                                self?.itemModels[self?.currItemModelIndex ?? 0].titleStickers.remove(at: index)
+                            }
+                        }
+                    }
+                }
+                subtitleCount = self?.itemModels[self?.currItemModelIndex ?? 0].titleStickers.count ?? 0
+                BFLog(2, message: "删除\(voiceModel?.wavFilePath ?? "")对应的字幕  后 count\(subtitleCount)")
+            
                 // 取消录制以后重置进度
                 self?.withdrawAction()
                 // 重置录制开始时间
@@ -852,7 +864,7 @@ public class BFRecordScreenController: BFBaseViewController {
         model.startTime = currentAssetProgress.seconds
         model.volume = 100
         recorderManager?.voiceModel = model
-        recorderManager?.startRecord(index: 1)
+        recorderManager?.startRecord()
         if recordStartTime <= 0 {
             recordStartTime = currentAssetProgress.seconds
         }
@@ -884,7 +896,7 @@ public class BFRecordScreenController: BFBaseViewController {
         pause()
         self.progressThumV.progressView.isUserInteractionEnabled = true
 
-        recorderManager?.endRecord()
+        recorderManager?.stopRecord(isCancel: false)
 
         if !avatarView.isHidden {
             avatarView.endRecord()
@@ -893,7 +905,7 @@ public class BFRecordScreenController: BFBaseViewController {
 
     @objc func cancleRecord() {
         isRecording = false
-        recorderManager?.cancleRecord()
+        recorderManager?.stopRecord(isCancel: true)
         self.progressThumV.progressView.isUserInteractionEnabled = true
 
         pause()