|
@@ -75,7 +75,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
var playView : GPUImageView?
|
|
|
|
|
|
|
|
|
-
|
|
|
+ var movieIsProcessing = false
|
|
|
var events = [WithDrawModel]()
|
|
|
var isDragingProgressSlder : Bool = false
|
|
|
var isStopAtRecordRange = -1
|
|
@@ -769,35 +769,56 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
if recordStartTime <= 0 {
|
|
|
recordStartTime = currentAssetProgress.seconds
|
|
|
}
|
|
|
- movie?.startProcessing()
|
|
|
- assetPlayer?.volume = self.haveSpeakVolume
|
|
|
- assetPlayer?.play()
|
|
|
+
|
|
|
+ events.append(WithDrawModel(type: 2, timestamp: model.startTime))
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
isRecording = true
|
|
|
|
|
|
if !avatarView.isHidden {
|
|
|
avatarView.beginRecord()
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- events.append(WithDrawModel(type: 2, timestamp: model.startTime))
|
|
|
|
|
|
|
|
|
|
|
|
- DispatchQueue.global().async { [weak self] in
|
|
|
- guard let sself = self else {
|
|
|
- return
|
|
|
- }
|
|
|
- sself.speechTranscriberUtil?.delegate = sself
|
|
|
- sself.speechTranscriberUtil?.startTranscriber()
|
|
|
- sself.speechTranscriberUtil?.currItemModelIndex = Int32(sself.currItemModelIndex)
|
|
|
- }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
if itemModels[currItemModelIndex].mediaType == .VIDEO {
|
|
|
+
|
|
|
+ if !movieIsProcessing {
|
|
|
+ movie?.startProcessing()
|
|
|
+ movieIsProcessing = true
|
|
|
+ }
|
|
|
+ assetPlayer?.volume = 0
|
|
|
assetPlayer?.play()
|
|
|
+
|
|
|
|
|
|
(collectionView.cellForItem(at: IndexPath(item: currItemModelIndex, section: 0)) as? BFImageCoverViewCell)?.playBtn.isSelected = true
|
|
|
}
|
|
|
+
|
|
|
recorderManager.audioRecorder?.recorderProgross = { [weak self] progress in
|
|
|
- BFLog(message: "录音进度--\(progress)")
|
|
|
+ BFLog(1, message: "curr:录音进度--\(progress)")
|
|
|
if self?.indirectionView == nil {
|
|
|
self?.indirectionView = BFIndirectionProgressView(frame: self?.progressThumV.progessIndicateBackV.bounds ?? CGRect.zero, percenWidth: self?.itemModels[self?.currItemModelIndex ?? 0].mediaType == .IMAGE ? (self?.progressThumV.thumbImageWidth ?? 0) / 2 : 0, totalDuration: self?.itemModels[self?.currItemModelIndex ?? 0].materialDuraion ?? 0)
|
|
|
self?.progressThumV.progessIndicateBackV.addSubview((self?.indirectionView)!)
|
|
@@ -965,7 +986,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
|
|
|
if fabs(elems[0].1.endTime - self.currentAssetProgress.seconds) < 0.5 {
|
|
|
BFLog(1, message: "吸附在录音结尾")
|
|
|
- changeWithDrawBtnLayout(false)
|
|
|
+
|
|
|
changeProgress(progress: Float(elems[0].1.endTime / itemModels[currItemModelIndex].materialDuraion))
|
|
|
progressThumV.progress = elems[0].1.endTime
|
|
|
|
|
@@ -976,7 +997,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
}else {
|
|
|
if fabs(elems[0].1.startTime - self.currentAssetProgress.seconds) < 0.5 {
|
|
|
BFLog(1, message: "吸附在录音开始")
|
|
|
- changeWithDrawBtnLayout(true)
|
|
|
+
|
|
|
changeProgress(progress: Float(elems[0].1.startTime / itemModels[currItemModelIndex].materialDuraion))
|
|
|
progressThumV.progress = elems[0].1.startTime
|
|
|
}
|
|
@@ -1068,7 +1089,6 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
if let playItem = player.currentItem {
|
|
|
NotificationCenter.default.removeObserver(self, name: .AVPlayerItemDidPlayToEndTime, object: playItem)
|
|
|
recordPlayer?.replaceCurrentItem(with: newItem)
|
|
|
- assetPlayer?.volume = self.noSpeakVolume
|
|
|
}
|
|
|
} else {
|
|
|
recordPlayer = AVPlayer(playerItem: newItem)
|
|
@@ -1082,6 +1102,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: newItem, queue: .main) { [weak self, weak recordedAudio] _ in
|
|
|
self?.hadPrepareToPlayRecord = false
|
|
|
self?.currentPlayRecordIndex = -1
|
|
|
+ self?.assetPlayer?.volume = self?.noSpeakVolume ?? 0
|
|
|
didPlayToEndTime(recordedAudio, newItem)
|
|
|
}
|
|
|
_ = recordPlayer?.addPeriodicTimeObserver(forInterval: CMTime(value: 1, timescale: 1000), queue: DispatchQueue.global()) { time in
|
|
@@ -1108,11 +1129,12 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
|
|
|
if currentPlayRecordIndex == -1, self.isNormalPlaying {
|
|
|
let second = CMTimeGetSeconds(currentT) - recordedAudio.startTime
|
|
|
+ self.assetPlayer?.volume = self.haveSpeakVolume
|
|
|
+
|
|
|
DispatchQueue.main.async { [weak self] in
|
|
|
self?.recordPlayer?.seek(to: CMTime(value: CMTimeValue(second * 1_000_000), timescale: 1_000_000), toleranceBefore: CMTime(value: 1, timescale: 1_000_000), toleranceAfter: CMTime(value: 1, timescale: 1_000_000), completionHandler: { [weak self] finished in
|
|
|
if finished, self?.isNormalPlaying ?? false {
|
|
|
self?.recordPlayer?.play()
|
|
|
- self?.assetPlayer?.volume = self?.haveSpeakVolume ?? 0
|
|
|
BFLog(1, message: "录音开始播放 playing, \(second), \(CMTimeGetSeconds(self?.recordPlayer?.currentItem?.duration ?? .zero)), \(self?.recordPlayer?.currentItem?.currentTime().seconds ?? 0)")
|
|
|
}
|
|
|
})
|
|
@@ -1124,21 +1146,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
}
|
|
|
}
|
|
|
BFLog(1, message: "应当播放:\(shouldPlayRecordIndex), 当前播放:\(currentPlayRecordIndex)")
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
}
|
|
|
|
|
|
func play() {
|
|
@@ -1161,8 +1169,11 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
currentAssetProgress = CMTime.zero
|
|
|
}
|
|
|
if itemModels[currItemModelIndex].mediaType == .VIDEO {
|
|
|
- assetPlayer?.volume = 1
|
|
|
- movie?.startProcessing()
|
|
|
+ assetPlayer?.volume = self.noSpeakVolume
|
|
|
+ if !movieIsProcessing {
|
|
|
+ movie?.startProcessing()
|
|
|
+ movieIsProcessing = true
|
|
|
+ }
|
|
|
assetPlayer?.play()
|
|
|
} else {
|
|
|
|
|
@@ -1236,6 +1247,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
filter.addTarget(preView)
|
|
|
|
|
|
movie?.startProcessing()
|
|
|
+ movieIsProcessing = true
|
|
|
}
|
|
|
|
|
|
func setAudioPlay(item: AVPlayerItem?) {
|
|
@@ -1306,6 +1318,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
|
|
|
func cleanMovieTarget() {
|
|
|
movie?.cancelProcessing()
|
|
|
+ movieIsProcessing = false
|
|
|
movie?.targets().forEach { target in
|
|
|
if let objc = target as? GPUImageOutput {
|
|
|
objc.removeAllTargets()
|