|
@@ -29,6 +29,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
playBtn.isSelected = isNormalPlaying
|
|
|
}
|
|
|
}
|
|
|
+ var currentAssetProgress : CMTime = .zero // 当前素材播放的进度
|
|
|
// 视频素材
|
|
|
public var avasset:AVURLAsset?
|
|
|
public var recordList:[PQVoiceModel] = [PQVoiceModel]()
|
|
@@ -56,20 +57,22 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
|
|
|
}
|
|
|
manager.endRecordHandle = {[weak self] (isTimeout, model) in
|
|
|
- if FileManager.default.fileExists(atPath: model?.wavFilePath ?? ""){
|
|
|
+ if let model = model, FileManager.default.fileExists(atPath: model.wavFilePath ?? ""){
|
|
|
// 加入到语音数组里
|
|
|
- model?.endTime = CMTimeGetSeconds(self?.assetPlayer?.currentItem?.currentTime() ?? CMTime.zero)
|
|
|
+ let ass = AVURLAsset(url: URL(fileURLWithPath: model.wavFilePath))
|
|
|
+
|
|
|
+ model.endTime = model.startTime + CMTimeGetSeconds(ass.duration)
|
|
|
while let m = self?.recordList.last{
|
|
|
- if model!.startTime < m.startTime {
|
|
|
+ if model.startTime < m.startTime {
|
|
|
self?.recordList.removeLast()
|
|
|
- }else if m.endTime > model!.startTime {
|
|
|
- m.endTime = model!.startTime
|
|
|
+ }else if m.endTime > model.startTime {
|
|
|
+ m.endTime = model.startTime
|
|
|
}else{
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
- BFLog(1, message: "添加录音文件:\(model?.startTime) -- \(model?.endTime)")
|
|
|
- self?.recordList.append(model!)
|
|
|
+ BFLog(1, message: "添加录音文件:\(model.startTime) -- \(model.endTime)")
|
|
|
+ self?.recordList.append(model)
|
|
|
self?.drawOrUpdateRecordProgessLable()
|
|
|
}
|
|
|
|
|
@@ -243,16 +246,14 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
}
|
|
|
|
|
|
progessSildeBackV.snp.makeConstraints { make in
|
|
|
- make.left.equalTo(closeBtn.snp.right).offset(10)
|
|
|
- make.right.equalTo(nextBtn.snp.left).offset(-10)
|
|
|
+ make.left.equalTo(closeBtn.snp.right).offset(16)
|
|
|
+ make.right.equalTo(nextBtn.snp.left).offset(-16)
|
|
|
make.centerY.equalTo(closeBtn)
|
|
|
make.height.equalTo(8)
|
|
|
}
|
|
|
|
|
|
progessSilde.snp.makeConstraints { make in
|
|
|
- make.left.equalTo(closeBtn.snp.right).offset(16)
|
|
|
- make.right.equalTo(nextBtn.snp.left).offset(-16)
|
|
|
- make.centerY.equalTo(progessSildeBackV)
|
|
|
+ make.left.right.centerY.equalTo(progessSildeBackV)
|
|
|
make.height.equalTo(20)
|
|
|
}
|
|
|
|
|
@@ -307,7 +308,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
pause()
|
|
|
|
|
|
let model = PQVoiceModel()
|
|
|
- model.startTime = CMTimeGetSeconds(assetPlayer?.currentItem?.currentTime() ?? CMTime.zero)
|
|
|
+ model.startTime = CMTimeGetSeconds(self.currentAssetProgress)
|
|
|
recorderManager.voiceModel? = model
|
|
|
recorderManager.startRecord(index: recordList.count)
|
|
|
movie?.startProcessing()
|
|
@@ -434,8 +435,8 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
// 两个逻辑:如果在播,则跳过;如果暂停拖动到中间,则seek
|
|
|
if currentPlayRecordIndex == -1 {
|
|
|
let second = CMTimeGetSeconds(currentT) - recordedAudio.startTime
|
|
|
- recordPlayer?.seek(to: CMTime(value: CMTimeValue(second), timescale: 100), toleranceBefore: CMTime(value: 1, timescale: 1000), toleranceAfter: CMTime(value: 1, timescale: 1000), completionHandler: { finished in
|
|
|
- if finished {
|
|
|
+ recordPlayer?.seek(to: CMTime(value: CMTimeValue(second), timescale: 100), toleranceBefore: CMTime(value: 1, timescale: 1000), toleranceAfter: CMTime(value: 1, timescale: 1000), completionHandler: {[weak self] finished in
|
|
|
+ if finished && (self?.isNormalPlaying ?? false) {
|
|
|
DispatchQueue.main.async {[weak self] in
|
|
|
self?.recordPlayer?.play()
|
|
|
}
|
|
@@ -580,6 +581,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
assetPlayer = AVPlayer(playerItem: item)
|
|
|
avplayerTimeObserver = assetPlayer?.addPeriodicTimeObserver(forInterval: CMTime(value: 1, timescale: 100), queue: DispatchQueue.global()) {[weak self] time in
|
|
|
// 进度监控
|
|
|
+ self?.currentAssetProgress = time
|
|
|
BFLog(1, message: "curr:\(CMTimeGetSeconds(time))")
|
|
|
if CMTimeGetSeconds(item.duration) > 0, !(self?.isDragingProgressSlder ?? false) {
|
|
|
DispatchQueue.main.async { [weak self] in
|