浏览代码

1,录音转文字放到支线,2 字幕数据统一使用 BFRecordItemModel

jsonwang 3 年之前
父节点
当前提交
92e62f5ac9
共有 1 个文件被更改,包括 30 次插入13 次删除
  1. 30 13
      BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

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

@@ -71,7 +71,7 @@ public class BFRecordScreenController: BFBaseViewController {
     var isStopAtRecordRange = -1
     var isStopAtRecordRange = -1
     
     
     //保存识别出来的字幕信息,用于回放,和合成使用
     //保存识别出来的字幕信息,用于回放,和合成使用
-    var saveSubTitles:[PQEditSubTitleModel] = Array.init()
+//    var saveSubTitles:[PQEditSubTitleModel] = Array.init()
     //定义音频的编码参数
     //定义音频的编码参数
     let recordSettings:[String : Any] = [AVSampleRateKey : 44100.0, // 声音采样率
     let recordSettings:[String : Any] = [AVSampleRateKey : 44100.0, // 声音采样率
                                          AVFormatIDKey : kAudioFormatLinearPCM,  // 编码格式
                                          AVFormatIDKey : kAudioFormatLinearPCM,  // 编码格式
@@ -416,7 +416,18 @@ public class BFRecordScreenController: BFBaseViewController {
     /// 更新字幕,在回放时使用
     /// 更新字幕,在回放时使用
     /// - Parameter time: 当前播放的进度
     /// - Parameter time: 当前播放的进度
     func updateSubtitle(time:CMTime) {
     func updateSubtitle(time:CMTime) {
-         
+        
+        var findShowSubtitle:PQEditSubTitleModel?
+        for subtitle in  itemModels[currItemModelIndex].titleStickers {
+            if(subtitle.timelineIn <= CMTimeGetSeconds(time) * 1_000_000 && subtitle.timelineOut >= CMTimeGetSeconds(time) * 1_000_000){
+                findShowSubtitle = subtitle
+                BFLog(message: "找到要显示的字幕 in \(findShowSubtitle?.timelineIn ?? 0.0) out \(findShowSubtitle?.timelineOut ?? 0.0) text:\(findShowSubtitle?.text ?? "") currTime is \(CMTimeGetSeconds(time))")
+                break
+            }
+        }
+        if(findShowSubtitle != nil){
+            subtitleLabel.text = findShowSubtitle?.text
+        }
     }
     }
     
     
     /// 设置字幕样式和位置
     /// 设置字幕样式和位置
@@ -626,17 +637,19 @@ public class BFRecordScreenController: BFBaseViewController {
  
  
         assetPlayer?.play()
         assetPlayer?.play()
         
         
-        
-        speechTranscriberUtil?.delegate = self
-        speechTranscriberUtil?.startTranscriber()
-        
-        
-        
+        DispatchQueue.global().async {
+            self.speechTranscriberUtil?.delegate = self
+            self.speechTranscriberUtil?.startTranscriber()
+            self.speechTranscriberUtil?.currItemModelIndex = Int32(self.currItemModelIndex)
+        }
+ 
     }
     }
     
     
     @objc func endRecord(){
     @objc func endRecord(){
         
         
-        speechTranscriberUtil?.endTranscriber()
+        DispatchQueue.global().async {
+            self.speechTranscriberUtil?.endTranscriber()
+        }
         playBtn.isSelected = true
         playBtn.isSelected = true
         // 存储录音
         // 存储录音
         isRecording = false
         isRecording = false
@@ -1007,6 +1020,7 @@ public class BFRecordScreenController: BFBaseViewController {
                         if su{
                         if su{
                             self?.progressThumV.progress = time.seconds
                             self?.progressThumV.progress = time.seconds
                         }
                         }
+                        self?.updateSubtitle(time: time)
                     }
                     }
                 }
                 }
                 
                 
@@ -1119,16 +1133,19 @@ extension BFRecordScreenController:PQSpeechTranscriberUtilDelegate{
         DispatchQueue.main.async {
         DispatchQueue.main.async {
             
             
             //1,显示字幕
             //1,显示字幕
-            self.subtitleLabel.text = ((payload?["result"]) as? String) ?? ""
+//            self.subtitleLabel.text = ((payload?["result"]) as? String) ?? ""
             self.setSubtitleStyle(settingModel: self.subtitleSettingView.subtitle.setting)
             self.setSubtitleStyle(settingModel: self.subtitleSettingView.subtitle.setting)
             
             
             //2,保存字幕数据
             //2,保存字幕数据
             let newSubtitle = PQEditSubTitleModel()
             let newSubtitle = PQEditSubTitleModel()
-//            newSubtitle.timelineIn = subTitle.timelineIn
-//            newSubtitle.timelineOut = subTitle.timelineOut
+            newSubtitle.timelineIn = self.itemModels[self.currItemModelIndex].titleStickers.last?.timelineOut ?? 0
+            //当前已处理的音频时长,单位:毫秒。
+            newSubtitle.timelineOut = Float64(((payload?["time"]) as? Int) ?? 0) * 1_000_000
             newSubtitle.text = ((payload?["result"]) as? String) ?? ""
             newSubtitle.text = ((payload?["result"]) as? String) ?? ""
             newSubtitle.setting = self.subtitleSettingView.subtitle.setting
             newSubtitle.setting = self.subtitleSettingView.subtitle.setting
-            self.saveSubTitles.append(newSubtitle)
+            
+            self.itemModels[self.currItemModelIndex].titleStickers.append(newSubtitle)
+
             
             
         }
         }