|
@@ -169,7 +169,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
var currentAssetProgress: CMTime = .zero
|
|
|
{
|
|
|
didSet {
|
|
|
- BFLog(3, message: "currentAssetProgress=\(currentAssetProgress.seconds)")
|
|
|
+ BFLog(1, message: "currentAssetProgress=\(currentAssetProgress.seconds)")
|
|
|
rscurrentManager.currentAssetProgress = currentAssetProgress
|
|
|
}
|
|
|
} // 当前素材播放的进度
|
|
@@ -562,11 +562,83 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
self?.NeoNuiAPPID = appkey
|
|
|
self?.NeoNuiToken = token
|
|
|
}
|
|
|
+
|
|
|
+ initlizeRecordManager()
|
|
|
+
|
|
|
+ view.backgroundColor = .black
|
|
|
+ view.addSubview(collectionView)
|
|
|
+
|
|
|
+ fetchVideo()
|
|
|
+
|
|
|
+ view.addSubview(bottomeView)
|
|
|
+// view.addSubview(subtitleLabel)
|
|
|
+ view.addSubview(playBtn)
|
|
|
+ view.addSubview(avatarView)
|
|
|
+// view.addSubview(openCameraBtn)
|
|
|
+// view.addSubview(drawPinBtn)
|
|
|
+ view.addSubview(subtitleBtn)
|
|
|
+ view.addSubview(soundSettingBtn)
|
|
|
+ view.addSubview(subtitleSettingView)
|
|
|
|
|
|
- // MARK: - 录音机初始化
|
|
|
+ view.addSubview(audioSettingView)
|
|
|
+
|
|
|
+ bottomeView.addSubview(progreddL)
|
|
|
+ // view.addSubview(toolV)
|
|
|
+ bottomeView.addSubview(recordBtn)
|
|
|
+ bottomeView.addSubview(deleteRecordBtn)
|
|
|
+ bottomeView.addSubview(withDrawBtn)
|
|
|
+ // bottomeView.addSubview(changeVoiceBtn)
|
|
|
+ bottomeView.addSubview(progressThumV)
|
|
|
+ bottomeView.addSubview(cameraProgressThumV)
|
|
|
+
|
|
|
+ avatarView.recordEndCallBack = { _, materialsModel in
|
|
|
+ BFLog(message: "新录制完成::::\(materialsModel?.locationPath ?? "")")
|
|
|
+ }
|
|
|
|
|
|
- recorderManager = BFVoiceRecordManager()
|
|
|
|
|
|
+ // 字幕设置回调
|
|
|
+ subtitleSettingView.subtitleSettingCallBack = { [weak self] subtitileModel in
|
|
|
+
|
|
|
+ self?.setSubtitleStyle(settingModel: subtitileModel.setting)
|
|
|
+ // mdf by ak 这里是设置字幕开关回调
|
|
|
+ if self?.subTitleBtnClickHandle != nil {
|
|
|
+ self?.subTitleBtnClickHandle!(subtitileModel.setting.subtitleIsShow)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 编辑字幕完成
|
|
|
+ subtitleEditView.editSubtitleDone = { [weak self] newtext, index in
|
|
|
+
|
|
|
+ // 更新缓存数据
|
|
|
+ if index < (self?.itemModels[self?.currItemModelIndex ?? 0].titleStickers.count ?? 0) {
|
|
|
+ if newtext.count == 0 {
|
|
|
+ // 删除数据
|
|
|
+ BFLog(message: "清空字幕操作要删除原字幕 sticker 数据")
|
|
|
+ self?.itemModels[self?.currItemModelIndex ?? 0].titleStickers.remove(at: index)
|
|
|
+ } else {
|
|
|
+ // 更新数据
|
|
|
+ self?.itemModels[self?.currItemModelIndex ?? 0].titleStickers[index].text = newtext
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ self?.setSubtitleStyle(settingModel: (self?.subtitleSettingView.subtitle.setting)!)
|
|
|
+ }
|
|
|
+
|
|
|
+ layoutsubview()
|
|
|
+
|
|
|
+ view.addSubview(subtitleEditView)
|
|
|
+
|
|
|
+ if !SWNetRequest.isNetReachabled() {
|
|
|
+ cShowHUB(superView: view, msg: "网络不佳,字幕可能无法生成")
|
|
|
+ }
|
|
|
+ if PQENVUtil.shared.channel == "Development" {
|
|
|
+ view.addSubview(neoNuiDebugLabel)
|
|
|
+ view.addSubview(audioQueueRecoderLabel)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // MARK: - 录音机初始化
|
|
|
+ func initlizeRecordManager() {
|
|
|
+ recorderManager = BFVoiceRecordManager()
|
|
|
// 录音进度
|
|
|
recorderManager?.recorderProgrossHandle = { [weak self] progress in
|
|
|
// BFLog(1, message: "curr:录音进度--\(progress),\(self?.isRecording ?? false)")
|
|
@@ -627,7 +699,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
return
|
|
|
}
|
|
|
newSubtitle.timelineIn = currentVoice.startCMTime + CMTime(seconds: Float64((((payload?["begin_time"]) as? Int) ?? 0) + 300) / 1000.0, preferredTimescale: 1000)
|
|
|
- newSubtitle.timelineOut = currentVoice.startCMTime + CMTime(seconds: Float64(((payload?["time"]) as? Int) ?? 0) / 1000.0, preferredTimescale: 1000)
|
|
|
+ newSubtitle.timelineOut = currentVoice.startCMTime + CMTime(seconds: Float64((((payload?["time"]) as? Int) ?? 0) - 10) / 1000.0, preferredTimescale: 1000)
|
|
|
newSubtitle.audioFilePath = currentVoice.wavFilePath
|
|
|
BFLog(3, message: "字幕回调-字幕返回begin:\(((payload?["begin_time"]) as? Int) ?? 0),timelineIn:\(newSubtitle.timelineIn.seconds), end:\(((payload?["time"]) as? Int) ?? 0),timelineOut:\(newSubtitle.timelineOut.seconds)")
|
|
|
if (newSubtitle.timelineIn - currentVoice.startCMTime).seconds > 0.1 {
|
|
@@ -710,7 +782,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
event.deletedTittles = deletedTitlesTemp
|
|
|
wself.events.append(event)
|
|
|
|
|
|
- if wself.itemModels[wself.currItemModelIndex].mediaType == .Image {
|
|
|
+ if wself.itemModels[wself.currItemModelIndex].mediaType != .Video {
|
|
|
var duration: CMTime = .zero
|
|
|
wself.itemModels[wself.currItemModelIndex].voiceStickers.forEach { temp in
|
|
|
BFLog(1, message: "录制结束-最终:\(temp.wavFilePath ?? "")-\(temp.startCMTime.seconds)-\(temp.endCMTime.seconds)-\(temp.endCMTime.seconds - temp.startCMTime.seconds)")
|
|
@@ -764,75 +836,6 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- view.backgroundColor = .black
|
|
|
- view.addSubview(collectionView)
|
|
|
-
|
|
|
- fetchVideo()
|
|
|
-
|
|
|
- view.addSubview(bottomeView)
|
|
|
-// view.addSubview(subtitleLabel)
|
|
|
- view.addSubview(playBtn)
|
|
|
- view.addSubview(avatarView)
|
|
|
-// view.addSubview(openCameraBtn)
|
|
|
-// view.addSubview(drawPinBtn)
|
|
|
- view.addSubview(subtitleBtn)
|
|
|
- view.addSubview(soundSettingBtn)
|
|
|
- view.addSubview(subtitleSettingView)
|
|
|
-
|
|
|
- view.addSubview(audioSettingView)
|
|
|
-
|
|
|
- bottomeView.addSubview(progreddL)
|
|
|
- // view.addSubview(toolV)
|
|
|
- bottomeView.addSubview(recordBtn)
|
|
|
- bottomeView.addSubview(deleteRecordBtn)
|
|
|
- bottomeView.addSubview(withDrawBtn)
|
|
|
- // bottomeView.addSubview(changeVoiceBtn)
|
|
|
- bottomeView.addSubview(progressThumV)
|
|
|
- bottomeView.addSubview(cameraProgressThumV)
|
|
|
-
|
|
|
- avatarView.recordEndCallBack = { _, materialsModel in
|
|
|
- BFLog(message: "新录制完成::::\(materialsModel?.locationPath ?? "")")
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- // 字幕设置回调
|
|
|
- subtitleSettingView.subtitleSettingCallBack = { [weak self] subtitileModel in
|
|
|
-
|
|
|
- self?.setSubtitleStyle(settingModel: subtitileModel.setting)
|
|
|
- // mdf by ak 这里是设置字幕开关回调
|
|
|
- if self?.subTitleBtnClickHandle != nil {
|
|
|
- self?.subTitleBtnClickHandle!(subtitileModel.setting.subtitleIsShow)
|
|
|
- }
|
|
|
- }
|
|
|
- // 编辑字幕完成
|
|
|
- subtitleEditView.editSubtitleDone = { [weak self] newtext, index in
|
|
|
-
|
|
|
- // 更新缓存数据
|
|
|
- if index < (self?.itemModels[self?.currItemModelIndex ?? 0].titleStickers.count ?? 0) {
|
|
|
- if newtext.count == 0 {
|
|
|
- // 删除数据
|
|
|
- BFLog(message: "清空字幕操作要删除原字幕 sticker 数据")
|
|
|
- self?.itemModels[self?.currItemModelIndex ?? 0].titleStickers.remove(at: index)
|
|
|
- } else {
|
|
|
- // 更新数据
|
|
|
- self?.itemModels[self?.currItemModelIndex ?? 0].titleStickers[index].text = newtext
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- self?.setSubtitleStyle(settingModel: (self?.subtitleSettingView.subtitle.setting)!)
|
|
|
- }
|
|
|
-
|
|
|
- layoutsubview()
|
|
|
-
|
|
|
- view.addSubview(subtitleEditView)
|
|
|
-
|
|
|
- if !SWNetRequest.isNetReachabled() {
|
|
|
- cShowHUB(superView: view, msg: "网络不佳,字幕可能无法生成")
|
|
|
- }
|
|
|
- if PQENVUtil.shared.channel == "Development" {
|
|
|
- view.addSubview(neoNuiDebugLabel)
|
|
|
- view.addSubview(audioQueueRecoderLabel)
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
@objc func editSubtitle() {
|
|
@@ -1178,7 +1181,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
wself.recorderManager?.voiceModel = model
|
|
|
BFLog(3, message: "开始录制-开始:currentAssetProgress=\(wself.currentAssetProgress.seconds),cuInde=\(wself.currItemModelIndex),\(model)")
|
|
|
wself.recorderManager?.startRecord()
|
|
|
-// wself.recorderManager?.audioRecorder?.startNeoNui(wself.NeoNuiToken ?? "", appid: wself.NeoNuiAPPID ?? "")
|
|
|
+ wself.recorderManager?.audioRecorder?.startNeoNui(wself.NeoNuiToken ?? "", appid: wself.NeoNuiAPPID ?? "")
|
|
|
|
|
|
}
|
|
|
// 开始时间
|
|
@@ -1415,7 +1418,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
/// 重绘录音进度视图
|
|
|
resetAllIndirectionView()
|
|
|
// 如果是图片需重置播放按钮
|
|
|
- if itemModel.mediaType == .Image {
|
|
|
+ if itemModel.mediaType != .Video {
|
|
|
playBtn.isSelected = itemModels[currItemModelIndex].voiceStickers.count <= 0
|
|
|
playBtn.isHidden = playBtn.isSelected
|
|
|
}
|
|
@@ -1454,24 +1457,9 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
play()
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- @objc func sliderTouchBegan(sender _: UISlider) {
|
|
|
- isDragingProgressSlder = true
|
|
|
- pause()
|
|
|
- }
|
|
|
-
|
|
|
- @objc func sliderTouchEnded(sender: UISlider) {
|
|
|
- changeProgress(progress: sender.value)
|
|
|
- isDragingProgressSlder = false
|
|
|
- currentPlayRecordIndex = -1
|
|
|
- BFLog(3, message: "重置播放index-\(#function) = \(currentPlayRecordIndex),\(sender.value)")
|
|
|
- hadPrepareToPlayRecord = false
|
|
|
- }
|
|
|
-
|
|
|
- @objc func sliderValueDidChanged(sender: UISlider) {
|
|
|
- changeProgress(progress: sender.value)
|
|
|
- }
|
|
|
-
|
|
|
+
|
|
|
+ // MARK: - 进度条拖动回调
|
|
|
+
|
|
|
func thumbViewEnded(progress: Float) {
|
|
|
changeProgress(progress: progress)
|
|
|
isDragingProgressSlder = false
|
|
@@ -1865,8 +1853,9 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
hadPrepareToPlayRecord = false
|
|
|
|
|
|
// 暂停状态
|
|
|
- playBtn.isSelected = (rscurrentManager.recordItem?.mediaType == .Image && rscurrentManager.recordItem?.voiceStickers.count ?? -1 <= 0)
|
|
|
+ playBtn.isSelected = (rscurrentManager.recordItem?.mediaType != .Video && rscurrentManager.recordItem?.voiceStickers.count ?? -1 <= 0)
|
|
|
playBtn.isHidden = playBtn.isSelected
|
|
|
+ rscurrentManager.pause()
|
|
|
}
|
|
|
|
|
|
func fetchVideo() {
|
|
@@ -1879,19 +1868,19 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
itemModel.coverPath = asset.localPath
|
|
|
}
|
|
|
itemModels.append(itemModel)
|
|
|
- if index == 0 {
|
|
|
- if asset.mediaType == .video {
|
|
|
- itemModel.fetchAVUrlAssetCallBack = { [weak self, weak itemModel] in
|
|
|
- DispatchQueue.main.async { [weak self, weak itemModel] in
|
|
|
- self?.progressThumV.recordItem = itemModel
|
|
|
- self?.progressThumV.isHidden = false
|
|
|
- self?.recordBtn.isEnabled = true
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- recordBtn.isEnabled = true
|
|
|
- }
|
|
|
- }
|
|
|
+// if index == 0 {
|
|
|
+// if asset.mediaType == .video {
|
|
|
+// itemModel.fetchAVUrlAssetCallBack = { [weak self, weak itemModel] in
|
|
|
+// DispatchQueue.main.async { [weak self, weak itemModel] in
|
|
|
+//// self?.progressThumV.recordItem = itemModel
|
|
|
+// self?.progressThumV.isHidden = false
|
|
|
+// self?.recordBtn.isEnabled = true
|
|
|
+// }
|
|
|
+// }
|
|
|
+// } else {
|
|
|
+// recordBtn.isEnabled = true
|
|
|
+// }
|
|
|
+// }
|
|
|
}
|
|
|
}else {
|
|
|
let itemModel = BFRecordItemModel()
|
|
@@ -1904,7 +1893,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
collectionView.reloadData()
|
|
|
|
|
|
// 暂停状态--如果是图片素材同时没有录音文件时不显示播放按钮
|
|
|
- playBtn.isSelected = (itemModels.first?.mediaType == .Image && (itemModels.first?.voiceStickers.count ?? 0) <= 0)
|
|
|
+ playBtn.isSelected = (itemModels.first?.mediaType != .Video && (itemModels.first?.voiceStickers.count ?? 0) <= 0)
|
|
|
playBtn.isHidden = playBtn.isSelected
|
|
|
}
|
|
|
|
|
@@ -2136,7 +2125,7 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
|
|
|
}
|
|
|
cell?.addData()
|
|
|
if item.mediaType != .Camera {
|
|
|
- wself.progressThumV.recordItem = item
|
|
|
+ wself.progressThumV.recordItem?.coverImg = item.coverImg
|
|
|
wself.progressThumV.isHidden = false
|
|
|
}
|
|
|
}
|
|
@@ -2197,7 +2186,7 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
|
|
|
|
|
|
let recordItem = itemModels[currItemModelIndex]
|
|
|
// 暂停状态--如果是图片素材同时没有录音文件时不显示播放按钮
|
|
|
- playBtn.isSelected = (recordItem.mediaType == .Image && recordItem.voiceStickers.count <= 0)
|
|
|
+ playBtn.isSelected = (recordItem.mediaType != .Video && recordItem.voiceStickers.count <= 0)
|
|
|
playBtn.isHidden = playBtn.isSelected
|
|
|
// 重绘录音区域
|
|
|
progressThumV.recordItem = recordItem
|
|
@@ -2310,7 +2299,7 @@ public extension BFRecordScreenController {
|
|
|
} else {
|
|
|
currentAssetProgress = recordStartPlayTime + CMTime(seconds: progress, preferredTimescale: 1000)
|
|
|
}
|
|
|
- BFLog(1, message: "图片录音进度:\(progress),currentAssetProgress=\(currentAssetProgress.seconds),\(itemModels[currItemModelIndex].materialDuraion)")
|
|
|
+// BFLog(1, message: "图片录音进度:\(progress),currentAssetProgress=\(currentAssetProgress.seconds),\(itemModels[currItemModelIndex].materialDuraion)")
|
|
|
if itemModels[currItemModelIndex].mediaType == .Image {
|
|
|
/// 重置进度
|
|
|
resetCurrentProgress()
|