BFRecordItemModel.swift 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. //
  2. // BFRecordItemModel.swift
  3. // BFRecordScreenKit
  4. //
  5. // Created by 胡志强 on 2021/12/6.
  6. //
  7. import Foundation
  8. import BFFramework
  9. struct SplitRecordRange {
  10. var isRecord:Bool = false
  11. var range:CMTimeRange
  12. var index:Int
  13. }
  14. public class BFRecordItemModel: NSObject {
  15. var baseMaterial : AVURLAsset?
  16. var dealedDurationRanges = [SplitRecordRange]()
  17. public var voiceStickers = [PQVoiceModel]() //
  18. public var videoStickers = [PQEditVisionTrackMaterialsModel]()
  19. public var imageStickers = [PQEditVisionTrackMaterialsModel]()
  20. public var titleStickers = [PQEditSubTitleModel]()
  21. public var index = 0
  22. public var width = 0
  23. public var height = 0
  24. func generationTimeRanges(needSort:Bool = false) {
  25. dealedDurationRanges.removeAll()
  26. var start : Double = 0
  27. var list: [PQVoiceModel]
  28. list = voiceStickers.sorted { model1, model2 in
  29. model1.startTime < model2.startTime
  30. }
  31. for model in list {
  32. if model.startTime > start{
  33. //
  34. let range = CMTimeRange(start: CMTime(seconds: start, preferredTimescale: 100), duration: CMTime(seconds: model.startTime - start, preferredTimescale: 100))
  35. dealedDurationRanges.append(SplitRecordRange(isRecord: false, range: range, index: -1))
  36. }
  37. let ind = voiceStickers.firstIndex(of: model)
  38. let range = CMTimeRange(start: CMTime(seconds: model.startTime, preferredTimescale: 100), end: CMTime(seconds: model.endTime, preferredTimescale: 100))
  39. dealedDurationRanges.append(SplitRecordRange(isRecord: true, range: range, index: ind ?? -1))
  40. start = model.endTime
  41. }
  42. if start < baseMaterial?.duration.seconds ?? 0 {
  43. let range = CMTimeRange(start: CMTime(seconds: start, preferredTimescale: 100), end: CMTime(seconds: baseMaterial?.duration.seconds ?? 0, preferredTimescale: 100))
  44. dealedDurationRanges.append(SplitRecordRange(isRecord: false, range: range, index: -1))
  45. }
  46. }
  47. }