|
@@ -428,6 +428,8 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
self?.NeoNuiAPPID = appkey
|
|
|
self?.NeoNuiToken = token
|
|
|
}
|
|
|
+
|
|
|
+ //MARK: - 录音机初始化
|
|
|
recorderManager = BFVoiceRecordManager()
|
|
|
|
|
|
// 录音进度
|
|
@@ -486,7 +488,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
// 要删除的字幕
|
|
|
var deletedTitlesTemp = [(PQEditSubTitleModel, Int)]()
|
|
|
for (i, m) in sself.itemModels[sself.currItemModelIndex].voiceStickers.enumerated() {
|
|
|
- let originRange = CMTimeRange(start: CMTime(seconds: m.startTime, preferredTimescale: 1000), end: CMTime(seconds: m.endTime, preferredTimescale: 1000))
|
|
|
+ let originRange = CMTimeRange(start: CMTime(seconds: m.startTime, preferredTimescale: 1000), end: CMTime(seconds: m.endTime-0.001, preferredTimescale: 1000))
|
|
|
|
|
|
if CMTimeRangeGetIntersection(originRange, otherRange: newRange).duration.seconds > 0 {
|
|
|
deletedVoices.append((m, i))
|
|
@@ -1166,7 +1168,6 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
|
|
|
// 是否吸附在录音首尾处
|
|
|
func searchStopAtRecordRange(needAdsorb: Bool = false) {
|
|
|
- pauseTime = currentAssetProgress.seconds
|
|
|
|
|
|
// TODO: 滑动,播放暂停,撤销时,判断是否停止录音区间,是则删除相关录音,画笔,头像,字幕
|
|
|
let elems = itemModels[currItemModelIndex].voiceStickers.enumerated().filter { elem in
|
|
@@ -1184,10 +1185,11 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
changeProgress(progress: Float(elems[0].1.endTime / itemModels[currItemModelIndex].materialDuraion))
|
|
|
progressThumV.progress = elems[0].1.endTime
|
|
|
|
|
|
- deleteRecordBtn.isHidden = true
|
|
|
- recordBtn.isHidden = false
|
|
|
- isStopAtRecordRange = -1
|
|
|
- BFLog(1, message: "停在了录音区间外 \(isStopAtRecordRange)")
|
|
|
+// deleteRecordBtn.isHidden = true
|
|
|
+// recordBtn.isHidden = false
|
|
|
+// isStopAtRecordRange = -1
|
|
|
+// BFLog(1, message: "停在了录音区间外 \(isStopAtRecordRange)")
|
|
|
+ searchStopAtRecordRange(needAdsorb: false)
|
|
|
} else {
|
|
|
if fabs(elems[0].1.startTime - currentAssetProgress.seconds) < 0.5 {
|
|
|
BFLog(1, message: "吸附在录音开始")
|
|
@@ -1199,7 +1201,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 {
|
|
|
deleteRecordBtn.isHidden = false
|
|
@@ -1216,6 +1218,8 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
isStopAtRecordRange = -1
|
|
|
BFLog(1, message: "停在了录音区间外 \(isStopAtRecordRange)")
|
|
|
}
|
|
|
+ pauseTime = currentAssetProgress.seconds
|
|
|
+
|
|
|
}
|
|
|
|
|
|
// MARK: - 权限申请
|
|
@@ -1602,6 +1606,17 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ if isRecording{
|
|
|
+ let ratioX = 0.08
|
|
|
+ let startTime = recorderManager?.voiceModel?.startTime ?? 0
|
|
|
+ let progress = currentAssetProgress.seconds - startTime // - ratioX
|
|
|
+ // 使用播放器的进度来画线,因为进度是跟着播放器来了
|
|
|
+ DispatchQueue.main.async { [weak self] in
|
|
|
+ self?.indirectionView?.setProgress(start: startTime, progress: max(0, progress))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
func cleanMovieTarget() {
|
|
@@ -1644,8 +1659,9 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
newProgress = 0
|
|
|
}
|
|
|
if itemModels[currItemModelIndex].mediaType == .VIDEO {
|
|
|
- if let duration = assetPlayer?.currentItem?.duration {
|
|
|
- currentAssetProgress = CMTime(value: CMTimeValue(newProgress * Float(CMTimeGetSeconds(duration)) * 1000), timescale: 1000)
|
|
|
+ let duration = itemModels[currItemModelIndex].materialDuraion
|
|
|
+ if duration > 0{
|
|
|
+ currentAssetProgress = CMTime(value: CMTimeValue(newProgress * Float(duration) * 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())
|
|
@@ -1666,6 +1682,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 画进度线
|
|
|
func drawProgressIndication(progress: Double) {
|
|
|
if indirectionView == nil {
|
|
|
var percenWidth: CGFloat = 0
|
|
@@ -1680,9 +1697,11 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
// 更新录制进度
|
|
|
// 注:视频无法以录制进度驱动,因当录音开始录音时播放器还未播放,导致进度不一致
|
|
|
// 注:在录制停止时,视频播放器进度依然在走,误差在80毫秒左右
|
|
|
- if isRecording {
|
|
|
+ if isRecording && itemModels[currItemModelIndex].mediaType == .IMAGE{
|
|
|
let ratioX = 0.08
|
|
|
let startTime = recorderManager?.voiceModel?.startTime ?? 0
|
|
|
+
|
|
|
+ // 使用播放器的进度来画线,因为进度是跟着播放器来了
|
|
|
indirectionView?.setProgress(start: startTime, progress: max(0, progress - ratioX))
|
|
|
}
|
|
|
if itemModels[currItemModelIndex].mediaType == .IMAGE {
|