소스 검색

1,只有快慢速且非只有图片素材时自动+1处理

jsonwang 3 년 전
부모
커밋
e2e5fef2a3
1개의 변경된 파일33개의 추가작업 그리고 18개의 파일을 삭제
  1. 33 18
      BFFramework/Classes/Stuckpoint/Controller/PQStuckPointEditerController.swift

+ 33 - 18
BFFramework/Classes/Stuckpoint/Controller/PQStuckPointEditerController.swift

@@ -101,8 +101,8 @@ class PQStuckPointEditerController: PQBaseViewController {
     lazy var sustomSwitchView: PQCustomSwitchView = {
         let sustomSwitchView = PQCustomSwitchView(frame: CGRect(x: 16, y: 0, width: 180, height: 30), titles: ["快节奏", "适中", "慢节奏"], defaultIndex: stuckPointMusicData?.speed ?? 2)
         sustomSwitchView.switchChangeHandle = { [weak self] sender in
-            // 改变速率
-            if(self?.currentCreateStickersModel == .createStickersModelSpeed){
+            // 改变速率,.只有快慢速且非只有图片素材时自动+1处理
+            if(self?.currentCreateStickersModel == .createStickersModelSpeed && self?.selectedDataCount != self?.selectedImageDataCount){
                 self?.stuckPointMusicData?.speed = sender.tag + 1
             }else{
                 self?.stuckPointMusicData?.speed = sender.tag
@@ -1180,9 +1180,14 @@ extension PQStuckPointEditerController {
         var stuckPoints: Array = Array<Float>.init()
 
         var stuckPointsTemp = Array<Float>.init()
+        //
+        //最后一个卡点时间(原推荐卡点的倒数第二位时间)
+        let lastPoint =   Float((stuckPointMusicData!.rhythmSdata[0].pointTimes[stuckPointMusicData!.rhythmSdata[0].pointTimes.count - 1] )) / Float(BASE_FILTER_TIMESCALE)
+        
         for (index, dunshu) in stuckPointMusicData!.rhythmSdata[0].pointTimes.enumerated() {
-            BFLog(message: "原所有卡点数:\(index) \(Float(dunshu) / Float(BASE_FILTER_TIMESCALE))")
-            if Float64(dunshu) / Float64(BASE_FILTER_TIMESCALE) > (stuckPointMusicData?.startTime ?? 0) {
+       
+            if Float64(dunshu) / Float64(BASE_FILTER_TIMESCALE) > (stuckPointMusicData?.startTime ?? 0) && Float64(dunshu) / Float64(BASE_FILTER_TIMESCALE) < Float64(lastPoint) {
+                BFLog(message: "原所有卡点数:\(index) \(Float(dunshu) / Float(BASE_FILTER_TIMESCALE))")
                 stuckPointsTemp.append(Float(dunshu) / Float(BASE_FILTER_TIMESCALE))
             }
         }
@@ -1194,8 +1199,6 @@ extension PQStuckPointEditerController {
            适中为每两个点位取一个,即0,2,4,6……
            慢节奏为每三个点位取一个,即0,3,6,9……
          */
-        BFLog(message: "stuckPointMusicData?.speed is \(String(describing: stuckPointMusicData?.speed))")
-    
         //不丢
         if(seed == 1){
             stuckPoints = stuckPointsTemp
@@ -1223,7 +1226,7 @@ extension PQStuckPointEditerController {
             BFLog(message: "有 start end 计算后的卡点数\(point)")
         }
 
-        BFLog(message: "stuckPoints count is \(stuckPoints.count)")
+        BFLog(message: "处理节奏后 stuckPoints count is \(stuckPoints.count) seed \(seed), start time:\(stuckPoints.first ?? 0.0),end time:\(stuckPoints.last ?? 0.0) 总时长为:\((stuckPoints.last ?? 0.0) - (stuckPoints.first ?? 0.0))")
         
         return stuckPoints
         
@@ -1239,7 +1242,7 @@ extension PQStuckPointEditerController {
         //注意推荐时间位置和后面最近的卡点时间与0.3的关系
         //保存丢卡点处理后的卡点信息推荐开始到最后倒数第二个
         let stuckPointsTemp:Array<Float>
- 
+        
         //已经取到的视频素材总长度,用于和原视频素材时长做对比,不够多加一个点
         var useAssestDuration:Float = 0.0
         switch model {
@@ -1254,16 +1257,16 @@ extension PQStuckPointEditerController {
             while useAssestDuration < Float(Float(selectedTotalDuration) / (Float(maxSpeed) + 1)) {
             
                 //回环从头取
-                if(i+2 >= stuckPointsTemp.count){
+                if(i+1 >= stuckPointsTemp.count){
                     i = 0
                 }
                 //快速段
                 let LA =  (stuckPointsTemp[i+1] - stuckPointsTemp[i])
                 useAssestDuration = useAssestDuration + Float(LA)
                 if(useAssestDuration > Float(selectedTotalDuration)){ break}
-                //慢速段
-                let LB = (stuckPointsTemp[i+2] - stuckPointsTemp[i+1])
-                useAssestDuration = useAssestDuration + Float(LB)
+//                //慢速段
+//                let LB = (stuckPointsTemp[i+2] - stuckPointsTemp[i+1])
+//                useAssestDuration = useAssestDuration + Float(LB)
                 i = i + 1
                 clipNum = clipNum + 1
             }
@@ -1276,7 +1279,17 @@ extension PQStuckPointEditerController {
             break
         case .createStickersModelSpeed,.createStickersModelOnlyMusic://快慢速
             //快慢速  (2:快节奏,3:适中,4:慢节奏)
-            stuckPointsTemp  = getUsedStuckPoint(seed: (stuckPointMusicData?.speed ?? 0) + 1)
+            var tempMaxSpeed:Float = 1
+            var tempMinSpeed:Float = 1
+            if(model == .createStickersModelSpeed){
+                stuckPointsTemp  = getUsedStuckPoint(seed: (stuckPointMusicData?.speed ?? 0) + 1)
+                tempMaxSpeed = maxSpeed
+                tempMinSpeed = minSpeed
+            }else{
+                stuckPointsTemp  = getUsedStuckPoint(seed: (stuckPointMusicData?.speed ?? 0))
+              
+            }
+           
             
             /*
              - A-视频中的快速片段
@@ -1314,11 +1327,11 @@ extension PQStuckPointEditerController {
                             while useAssestDurationTemp < assetDuration {
                             
                                 //回环从头取
-                                if(i+2 > stuckPointsTemp.count){
+                                if(i+1 >= stuckPointsTemp.count || i+2 >= stuckPointsTemp.count){
                                     i = 0
                                 }
                                 //快速段
-                                let LA = maxSpeed * (stuckPointsTemp[i+1] - stuckPointsTemp[i])
+                                let LA = tempMaxSpeed * (stuckPointsTemp[i+1] - stuckPointsTemp[i])
                                 useAssestDurationTemp = useAssestDurationTemp + Float(LA)
                                 if(useAssestDurationTemp > Float(assetDuration)){
                                     useAssestDurationTemp = useAssestDurationTemp - Float(LA)
@@ -1328,7 +1341,7 @@ extension PQStuckPointEditerController {
                                 LACount = LACount + 1
                                 BFLog(message: "快速段段段段段段后LACount:\(LACount) realUsedMusicDuration:\(useAssestDurationTemp)")
                                 //慢速段
-                                let LB = minSpeed * (stuckPointsTemp[i+2] - stuckPointsTemp[i+1])
+                                let LB = tempMinSpeed * (stuckPointsTemp[i+2] - stuckPointsTemp[i+1])
                                 useAssestDurationTemp = useAssestDurationTemp + Float(LB)
                                 if(useAssestDurationTemp > Float(assetDuration)){
                                     useAssestDurationTemp = useAssestDurationTemp - Float(LB)
@@ -1340,14 +1353,16 @@ extension PQStuckPointEditerController {
                                 i = i + 1
                             }
                             //2拼接要使用的卡点信息
-                            for i in 0...(LACount + LBCount) {
+                            sticker.clipCount = LACount + LBCount
+                          
+                            for i in 0...sticker.clipCount {
                                 
                                 let a = stuckPointsTemp[(i + Int(lastPointIndex ?? 0)) % stuckPointsTemp.count]
                                 let b = Float((i + Int(lastPointIndex ?? 0)) / stuckPointsTemp.count) * (stuckPointsTemp.first ?? 0)
                                 finallyStuckPoints.append(a + b)
                             }
                             
-                            sticker.clipCount = LACount + LBCount
+                          
                             
                             //3,多补一个卡点 做 C级 速处理
                             if(useAssestDurationTemp < assetDuration){