|
@@ -75,7 +75,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
var recordStartPlayTime: CMTime = .zero
|
|
|
// 某个录音开始播放时间
|
|
|
var currenStartPlayTime: CMTime = .zero
|
|
|
- var recordStartTime: Double = 0 // 录制开始时间
|
|
|
+// var recordStartTime: Double = 0 // 录制开始时间
|
|
|
var pauseTime: Double = 0 // 停止无操作的时间点
|
|
|
|
|
|
var assetPlayer: AVPlayer? // 原视频音频播放器
|
|
@@ -432,7 +432,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
|
|
|
// 录音进度
|
|
|
recorderManager?.recorderProgrossHandle = { [weak self] progress in
|
|
|
- BFLog(1, message: "curr:录音进度--\(progress ?? 0.0) \(self?.recordStartTime ?? 0) \(self?.isRecording ?? false)")
|
|
|
+ BFLog(1, message: "curr:录音进度--\(progress ?? 0.0) \(self?.recorderManager?.voiceModel?.startTime ?? 0) \(self?.isRecording ?? false)")
|
|
|
self?.drawProgressIndication(progress: (progress.isNaN || progress.isInfinite) ? progress : 0)
|
|
|
self?.drawProgressIndication(progress: progress ?? 0)
|
|
|
}
|
|
@@ -540,11 +540,12 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
self?.resetCurrentProgress()
|
|
|
self?.deleteRecordBtn.isHidden = true
|
|
|
self?.recordBtn.isHidden = (self?.itemModels[self?.currItemModelIndex ?? 0].mediaType == .IMAGE && (self?.isEndPlay ?? false)) ? false : (self?.isEndPlay ?? false)
|
|
|
+ self?.recorderManager?.voiceModel = nil
|
|
|
}
|
|
|
sself.currentPlayRecordIndex = -3 // 刚录音完,不需要播放录音
|
|
|
BFLog(3, message: "重置播放index-\(#function) = \(sself.currentPlayRecordIndex)")
|
|
|
- // 重置录制开始时间
|
|
|
- sself.recordStartTime = 0
|
|
|
+// // 重置录制开始时间
|
|
|
+// sself.recordStartTime = 0
|
|
|
}
|
|
|
}
|
|
|
recorderManager?.cancelRecordHandle = { [weak self] voiceModel in
|
|
@@ -563,13 +564,15 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
subtitleCount = self?.itemModels[self?.currItemModelIndex ?? 0].titleStickers.count ?? 0
|
|
|
BFLog(2, message: "删除\(voiceModel?.wavFilePath ?? "")对应的字幕 后 count\(subtitleCount)")
|
|
|
|
|
|
- // 重置录制开始时间
|
|
|
- self?.recordStartTime = 0
|
|
|
+// // 重置录制开始时间
|
|
|
+// self?.recordStartTime = 0
|
|
|
/// 重置进度
|
|
|
+ self?.currentAssetProgress = CMTime(seconds: voiceModel?.startTime ?? 0, preferredTimescale: 1000)
|
|
|
self?.resetCurrentProgress()
|
|
|
// 移除
|
|
|
self?.indirectionView?.deleteItem(isCurrent: true)
|
|
|
-
|
|
|
+ self?.recorderManager?.voiceModel = nil
|
|
|
+
|
|
|
}
|
|
|
|
|
|
recorderManager?.NeoNuiDebugHandle = { [weak self] msg in
|
|
@@ -944,9 +947,9 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
recorderManager?.voiceModel = model
|
|
|
recorderManager?.startRecord()
|
|
|
recorderManager?.audioRecorder?.startNeoNui(NeoNuiToken ?? "", appid: NeoNuiAPPID ?? "")
|
|
|
- if recordStartTime <= 0 {
|
|
|
- recordStartTime = currentAssetProgress.seconds
|
|
|
- }
|
|
|
+// if recordStartTime <= 0 {
|
|
|
+// recordStartTime = currentAssetProgress.seconds
|
|
|
+// }
|
|
|
|
|
|
isRecording = true
|
|
|
|
|
@@ -977,7 +980,14 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
|
|
|
view.isUserInteractionEnabled = true
|
|
|
recorderManager?.stopRecord(isCancel: false)
|
|
|
-// changeWithDrawBtnLayout(2)
|
|
|
+
|
|
|
+ if currentAssetProgress.seconds - (recorderManager?.voiceModel?.startTime ?? 0 ) >= 1.0 {
|
|
|
+
|
|
|
+ }else{
|
|
|
+ let startTime = recorderManager?.voiceModel?.startTime ?? 0
|
|
|
+ changeProgress(progress: Float(startTime / itemModels[currItemModelIndex].materialDuraion))
|
|
|
+ }
|
|
|
+
|
|
|
/*
|
|
|
if currentAssetProgress.seconds - (recorderManager?.voiceModel?.startTime ?? 0 ) >= 1.0 {
|
|
|
recorderManager?.stopRecord(isCancel: false)
|
|
@@ -1168,7 +1178,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
|
|
|
// TODO: 滑动,播放暂停,撤销时,判断是否停止录音区间,是则删除相关录音,画笔,头像,字幕
|
|
|
let elems = itemModels[currItemModelIndex].voiceStickers.enumerated().filter { elem in
|
|
|
- (elem.1.startTime) <= self.currentAssetProgress.seconds && (elem.1.endTime) > self.currentAssetProgress.seconds
|
|
|
+ (elem.1.startTime) <= self.currentAssetProgress.seconds && (elem.1.endTime - 0.001) > self.currentAssetProgress.seconds
|
|
|
}
|
|
|
|
|
|
isEndPlay = false
|
|
@@ -1204,7 +1214,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
recordBtn.isHidden = true
|
|
|
|
|
|
isStopAtRecordRange = elems.first!.0
|
|
|
- BFLog(1, message: "停在了录音区间里 \(isStopAtRecordRange)")
|
|
|
+ BFLog(1, message: "停在了录音区间里 \(isStopAtRecordRange), currTime:\(currentAssetProgress.seconds), 录音范围:\(elems[0].1.startTime) - \(elems[0].1.endTime)")
|
|
|
}
|
|
|
|
|
|
} else {
|
|
@@ -1554,19 +1564,28 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
}
|
|
|
|
|
|
NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: assetPlayer?.currentItem, queue: .main) { [weak self] notify in
|
|
|
- BFLog(1, message: "AVPlayerItemDidPlayToEndTime = \(notify)")
|
|
|
+ guard let sself = self else {
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
- self?.isNormalPlaying = false
|
|
|
- self?.isEndPlay = true
|
|
|
+ // 非录音的播放状态,结束时自动跳下一段落
|
|
|
+ if !sself.isRecording && (sself.currItemModelIndex < (sself.itemModels.count - 1)){
|
|
|
+// self?.collectionView.setContentOffset(CGPoint(x: CGFloat((self?.currItemModelIndex ?? 0) + 1) * (self?.collectionView.frame.width ?? 0), y: 0), animated: true)
|
|
|
+ } else {
|
|
|
+
|
|
|
+ } //
|
|
|
+
|
|
|
+ sself.isNormalPlaying = false
|
|
|
+ sself.isEndPlay = true
|
|
|
|
|
|
- self?.subtitleBtn.isHidden = false
|
|
|
- self?.soundSettingBtn.isHidden = false
|
|
|
+ sself.subtitleBtn.isHidden = false
|
|
|
+ sself.soundSettingBtn.isHidden = false
|
|
|
|
|
|
- if self?.isRecording ?? false {
|
|
|
- self?.endRecord()
|
|
|
+ if sself.isRecording {
|
|
|
+ sself.endRecord()
|
|
|
cShowHUB(superView: nil, msg: "此视频已录制到头了哦")
|
|
|
}
|
|
|
- self?.playBtn.isSelected = false
|
|
|
+ sself.playBtn.isSelected = false
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1580,7 +1599,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
if itemModels[currItemModelIndex].mediaType == .VIDEO {
|
|
|
if CMTimeGetSeconds(item?.duration ?? CMTime.zero) > 0 {
|
|
|
currentAssetProgress = CMTime(seconds: time.seconds, preferredTimescale: 1000)
|
|
|
- BFLog(1, message: "curr:\(CMTimeGetSeconds(currentAssetProgress))")
|
|
|
+ BFLog(1, message: "video curr:\(CMTimeGetSeconds(currentAssetProgress))")
|
|
|
DispatchQueue.main.async { [weak self] in
|
|
|
BFLog(message: "更新录音进度\(#function)-\(self?.currentAssetProgress.seconds ?? 0)")
|
|
|
self?.progreddL.text = String(format: "%@", CMTimeGetSeconds(time).formatDurationToHMS())
|
|
@@ -1628,6 +1647,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
}
|
|
|
|
|
|
// 通过缩略图进度条控制播放进度
|
|
|
+ // progress : 图片且isback为true时,表示是时长; 其他情况: 0 - 1,百分比
|
|
|
func changeProgress(isBack: Bool = false, progress: Float) {
|
|
|
var newProgress = progress
|
|
|
if progress.isNaN || progress.isInfinite {
|
|
@@ -1644,7 +1664,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
- currentAssetProgress = isBack ? CMTime(value: CMTimeValue(progress * 1000), timescale: 1000) : CMTime(value: CMTimeValue(progress * Float(itemModels[currItemModelIndex].materialDuraion) * 1000), timescale: 1000)
|
|
|
+ currentAssetProgress = isBack ? CMTime(value: CMTimeValue(newProgress * 1000), timescale: 1000) : CMTime(value: CMTimeValue(newProgress * Float(itemModels[currItemModelIndex].materialDuraion) * 1000), timescale: 1000)
|
|
|
DispatchQueue.main.async { [weak self] in
|
|
|
BFLog(message: "更新录音进度\(#function)-\(self?.currentAssetProgress.seconds ?? 0)")
|
|
|
self?.progreddL.text = String(format: "%@", CMTimeGetSeconds(self!.currentAssetProgress).formatDurationToHMS())
|
|
@@ -1672,7 +1692,8 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
// 注:在录制停止时,视频播放器进度依然在走,误差在80毫秒左右
|
|
|
if isRecording {
|
|
|
let ratioX = 0.08
|
|
|
- indirectionView?.setProgress(start: recordStartTime, progress: max(0, progress - ratioX))
|
|
|
+ let startTime = recorderManager?.voiceModel?.startTime ?? 0
|
|
|
+ indirectionView?.setProgress(start: startTime, progress: max(0, progress - ratioX))
|
|
|
}
|
|
|
if itemModels[currItemModelIndex].mediaType == .IMAGE {
|
|
|
imageRecordProgress(isRecord: true, progress: progress)
|