Prechádzať zdrojové kódy

1.图片录音回放

wenweiwei 3 rokov pred
rodič
commit
e93fcd4b35

+ 30 - 25
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -370,26 +370,25 @@ public class BFRecordScreenController: BFBaseViewController {
         }
         return collectionView
     }()
-    
-    //debug
+
+    // debug
     lazy var neoNuiDebugLabel: UILabel = {
-        let neoNuiDebugLabel = UILabel.init(frame: CGRect.init(x: 0, y: 100, width: 200, height: 24))
+        let neoNuiDebugLabel = UILabel(frame: CGRect(x: 0, y: 100, width: 200, height: 24))
         neoNuiDebugLabel.backgroundColor = .black
         neoNuiDebugLabel.textColor = .white
         neoNuiDebugLabel.textAlignment = .left
         return neoNuiDebugLabel
 
     }()
+
     lazy var audioQueueRecoderLabel: UILabel = {
-        let audioQueueRecoderLabel = UILabel.init(frame: CGRect.init(x: 0, y: 125, width: 200, height: 24))
+        let audioQueueRecoderLabel = UILabel(frame: CGRect(x: 0, y: 125, width: 200, height: 24))
         audioQueueRecoderLabel.backgroundColor = .black
         audioQueueRecoderLabel.textColor = .white
         audioQueueRecoderLabel.textAlignment = .left
         return audioQueueRecoderLabel
 
     }()
-    
-    
 
     // MARK: - ----------------- 生命周期
 
@@ -571,16 +570,15 @@ public class BFRecordScreenController: BFBaseViewController {
             // 移除
             self?.indirectionView?.deleteItem(isCurrent: true)
         }
-         
+
         recorderManager?.NeoNuiDebugHandle = { [weak self] msg in
             self?.neoNuiDebugLabel.text = "录音机:\(msg ?? "")"
         }
-        
+
         recorderManager?.AudioQueueRecoderDebugHandle = { [weak self] msg in
             self?.audioQueueRecoderLabel.text = "字幕服务:\(msg ?? "")"
         }
-      
-        
+
         view.backgroundColor = .black
         view.addSubview(collectionView)
         //        playView = GPUImageView(frame: view.bounds)
@@ -595,7 +593,6 @@ public class BFRecordScreenController: BFBaseViewController {
         view.addSubview(subtitleBtn)
         view.addSubview(soundSettingBtn)
         view.addSubview(subtitleSettingView)
-       
 
         view.addSubview(audioSettingView)
 
@@ -645,11 +642,9 @@ public class BFRecordScreenController: BFBaseViewController {
         if !SWNetRequest.isNetReachabled() {
             cShowHUB(superView: view, msg: "网络不佳,字幕可能无法生成")
         }
-        
+
         view.addSubview(neoNuiDebugLabel)
         view.addSubview(audioQueueRecoderLabel)
-       
-       
     }
 
     @objc func editSubtitle() {
@@ -892,6 +887,9 @@ public class BFRecordScreenController: BFBaseViewController {
             let model = itemModels[currItemModelIndex].voiceStickers[isStopAtRecordRange]
             itemModels[currItemModelIndex].voiceStickers.remove(at: isStopAtRecordRange)
             indirectionView?.deleteItem(index: isStopAtRecordRange)
+            var event = WithDrawModel(type: 3, timestamp: currentAssetProgress.seconds, deletedVoices: [(model, isStopAtRecordRange)])
+            event.deletedTittles = deleteTitles(voiceModel: model)
+            events.append(event)
             // 注:删除录音后图片素材需要回撤指针进度,同时后面录音往前挪
             if itemModels[currItemModelIndex].mediaType == .IMAGE {
                 let currDuration = model.endTime - model.startTime
@@ -909,11 +907,6 @@ public class BFRecordScreenController: BFBaseViewController {
                 /// 重绘录音进度视图
                 resetAllIndirectionView()
             }
-
-            var event = WithDrawModel(type: 3, timestamp: currentAssetProgress.seconds, deletedVoices: [(model, isStopAtRecordRange)])
-            event.deletedTittles = deleteTitles(voiceModel: model)
-            events.append(event)
-
             searchStopAtRecordRange()
         }
     }
@@ -1039,15 +1032,27 @@ public class BFRecordScreenController: BFBaseViewController {
             } else if action.type == 3 {
                 // 恢复删除录音
                 var tuples = action.deletedVoices
-                if tuples != nil, tuples!.count > 0 {
-                    tuples!.sort { tuple1, tuple2 in
-                        tuple1.1 < tuple2.1
+                tuples?.sort { tuple1, tuple2 in
+                    tuple1.1 < tuple2.1
+                }
+                if itemModels[currItemModelIndex].mediaType == .VIDEO {
+                    tuples?.forEach { tuple in
+                        itemModels[currItemModelIndex].voiceStickers.insert(tuple.0, at: tuple.1)
                     }
+                } else {
                     tuples?.forEach { tuple in
                         itemModels[currItemModelIndex].voiceStickers.insert(tuple.0, at: tuple.1)
+                        let currDuration = tuple.0.endTime - tuple.0.startTime
+                        itemModels[currItemModelIndex].materialDuraion = itemModels[currItemModelIndex].materialDuraion + currDuration
+                        for (index, item) in itemModels[currItemModelIndex].voiceStickers.enumerated() {
+                            if index > tuple.1 {
+                                // 注:开始时间减去duration or 等一前一段录音的结束时间
+                                item.startTime += currDuration
+                                item.endTime += currDuration
+                            }
+                        }
                     }
                 }
-
                 // 恢复字幕
                 let titleTuples = action.deletedTittles
                 if titleTuples != nil, titleTuples!.count > 0 {
@@ -1536,10 +1541,10 @@ public class BFRecordScreenController: BFBaseViewController {
 
             self?.isNormalPlaying = false
             self?.isEndPlay = true
-            
+
             self?.subtitleBtn.isHidden = false
             self?.soundSettingBtn.isHidden = false
-            
+
             if self?.isRecording ?? false {
                 self?.endRecord()
                 cShowHUB(superView: nil, msg: "此视频已录制到头了哦")