Bläddra i källkod

1,快慢速和仅音乐统一创建 filter 2,传拼接音乐的开始和结束时间,总时长

jsonwang 3 år sedan
förälder
incheckning
0ab92ff19b

+ 20 - 84
BFFramework/Classes/Stuckpoint/Controller/PQStuckPointEditerController.swift

@@ -698,6 +698,8 @@ class PQStuckPointEditerController: PQBaseViewController {
         videoExporter.selectedTotalDuration = selectedTotalDuration
         videoExporter.selectedDataCount = selectedDataCount
         videoExporter.selectedImageDataCount = selectedImageDataCount
+        videoExporter.finallyUserAudioTime = finallyUserAudioTime
+        videoExporter.clipAudioRange = getClipAudioRange()
         // 使用深 copy
         let json = projectModel.toJSONString(prettyPrint: false)
         if json == nil {
@@ -742,6 +744,17 @@ class PQStuckPointEditerController: PQBaseViewController {
         // 2,添加背景音乐
         projectModel.sData?.addBGM(audioMix: stuckPointMusicData!)
     }
+    
+    //计算拼接音乐的开始和结束点
+    func getClipAudioRange() ->  CMTimeRange  {
+        //设置音乐的拼接范围,开始:推荐的卡点  结束:点到的倒数第二位
+        let lastSecondPoint =   Float((stuckPointMusicData!.rhythmSdata[0].pointTimes[stuckPointMusicData!.rhythmSdata[0].pointTimes.count - 2] )) / Float(BASE_FILTER_TIMESCALE)
+        let clipAudioRange =
+        CMTimeRange(start: CMTime(value: CMTimeValue( Float(stuckPointMusicData?.startTime ?? 0) * Float(BASE_FILTER_TIMESCALE)), timescale: BASE_FILTER_TIMESCALE), end: CMTime(value: CMTimeValue((Float(lastSecondPoint)) * Float(BASE_FILTER_TIMESCALE)), timescale: BASE_FILTER_TIMESCALE))
+        
+        return clipAudioRange
+ 
+    }
 
     // 设置播放器
     func settingPlayerView() {
@@ -820,14 +833,8 @@ class PQStuckPointEditerController: PQBaseViewController {
         playerView.stop()
         // 这里的测试这个音乐播放有问题
 //        self.playerView.updateAsset(URL(fileURLWithPath: "63930549652d74e477141e3b79c8d29a9ef8af81625053214516.mp3", relativeTo:Bundle.main.resourceURL!), videoComposition: nil, audioMixModel: nil)
-        
-        
-        //设置音乐的拼接范围,开始:推荐的卡点  结束:点到的倒数第二位
-        let lastSecondPoint =   Float((stuckPointMusicData!.rhythmSdata[0].pointTimes[stuckPointMusicData!.rhythmSdata[0].pointTimes.count - 2] )) / Float(BASE_FILTER_TIMESCALE)
-        let clipAudioRange =
-        CMTimeRange(start: CMTime(value: CMTimeValue( Float(stuckPointMusicData?.startTime ?? 0) * Float(BASE_FILTER_TIMESCALE)), timescale: BASE_FILTER_TIMESCALE), end: CMTime(value: CMTimeValue((Float(lastSecondPoint)) * Float(BASE_FILTER_TIMESCALE)), timescale: BASE_FILTER_TIMESCALE))
- 
-        playerView.updateAsset(URL(fileURLWithPath: documensDirectory + audioPath), videoComposition: nil, audioMixModel: nil,originMusicDuration:finallyUserAudioTime,clipAudioRange: clipAudioRange)
+    
+        playerView.updateAsset(URL(fileURLWithPath: documensDirectory + audioPath), videoComposition: nil, audioMixModel: nil,originMusicDuration:finallyUserAudioTime,clipAudioRange: getClipAudioRange())
  
         let end2: TimeInterval = Date().timeIntervalSince1970
         BFLog(message: "updateAsset tiskskskskme  \(end2 - end)")
@@ -1035,81 +1042,7 @@ extension PQStuckPointEditerController {
                     }
                 }
             }
-        } else if model == .createStickersModelSpeed{//快慢速
-            for section in sections {
-                if section.sectionType == "normal" {
-              
-                    BFLog(message: "stuckPoints count is \(finallyStuckPoints.count)")
-                  
-                    //一共裁剪的段数
-                    var totalClipNum:Int = 0
-                    for sticker in section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials() {
-                        if sticker.type == StickerType.VIDEO.rawValue {
-                            let asset: AVURLAsset = AVURLAsset(url: URL(fileURLWithPath: documensDirectory + sticker.locationPath), options: nil)
-                        
-                            var i:Int = 0
-                            //一个视频切的的段落
-                            var oneVideoClipNum:Int = 0
-                         
-                            var realUsedMusicDuration = 0.0
-                            while realUsedMusicDuration <= CMTimeGetSeconds(asset.duration) {
-                                //快速段
-                                let LA = maxSpeed * (finallyStuckPoints[i+1] - finallyStuckPoints[i])
-                                realUsedMusicDuration = realUsedMusicDuration + Float64(LA)
-                                if(realUsedMusicDuration > CMTimeGetSeconds(asset.duration)){ break}
-                                oneVideoClipNum = oneVideoClipNum + 1
-                                //慢速段
-                                let LB = minSpeed * (finallyStuckPoints[i+2] - finallyStuckPoints[i+1])
-                                realUsedMusicDuration = realUsedMusicDuration + Float64(LB)
-                                oneVideoClipNum = oneVideoClipNum + 1
-                                i = i + 1
-                            }
-                            BFLog(message: "单个视频\(sticker.locationPath)时长::\(CMTimeGetSeconds(asset.duration)) ,clipNum is:\(oneVideoClipNum)")
-                            var lastOutTime:Float64 = 0.0
-                            for clipindex in 0 ... oneVideoClipNum - 1 {
-                                // deep copy sticker model 防止只有一个对象
-                                let stickerjson = sticker.toJSONString(prettyPrint: false)
-                                let deepCopySticker = Mapper<PQEditVisionTrackMaterialsModel>().map(JSONString: stickerjson!)
-                                // 设置循环模式和适配模式
-                                deepCopySticker?.generateDefaultValues()
-                                //当前分段的速度
-                                var tempSpeed = (totalClipNum + clipindex) % 2 == 0 ? maxSpeed : minSpeed
-//
-                                if(totalClipNum + 1 + clipindex < finallyStuckPoints.count){
-                                    deepCopySticker?.speedRate = tempSpeed
-                                    
-//                                    deepCopySticker?.model_in = Float64(tempSpeed) * Float64(finallyStuckPoints[totalClipNum + clipindex] - (finallyStuckPoints.first ?? 0.0))
-                                    deepCopySticker?.model_in = lastOutTime
-                                    
-                                    deepCopySticker?.out = lastOutTime + Float64(tempSpeed) * Float64(finallyStuckPoints[totalClipNum + 1 + clipindex] - finallyStuckPoints[totalClipNum + clipindex])
- 
-                                    lastOutTime =  deepCopySticker?.out ?? 0
-                                    
-                                    deepCopySticker?.timelineIn =   Float64(finallyStuckPoints[totalClipNum + clipindex])
-                                    deepCopySticker?.timelineOut =    Float64(finallyStuckPoints[totalClipNum + 1 + clipindex])
-                                    
-                                    
-                                }
-                                BFLog(message: " 创建 sticker crilp is in \(String(format: "%.6f", deepCopySticker?.model_in ?? 0)) out  \(String(format: "%.6f", deepCopySticker?.out ?? 0)) ,分段素材时长:\(String(format: "%.6f", (deepCopySticker?.out ?? 0) - (deepCopySticker?.model_in ?? 0))) ,分段显示时长:\(String(format: "%.6f", (deepCopySticker?.timelineOut ?? 0) - (deepCopySticker?.timelineIn ?? 0))), 总时长\(CMTimeGetSeconds(asset.duration)) timelineIN: \(String(format: "%.6f", deepCopySticker?.timelineIn ?? 0)) timelineOUT:\(String(format: "%.6f", deepCopySticker?.timelineOut ?? 0)) speedRate:\(deepCopySticker?.speedRate ?? 0.0)")
-
-                                if deepCopySticker != nil {
-                                    stickers.append(deepCopySticker!)
-                                }
-                              
-                            }
-                            totalClipNum = totalClipNum + oneVideoClipNum - 1
-                        } else if sticker.type == StickerType.IMAGE.rawValue {
-                            sticker.generateDefaultValues()
-                            sticker.timelineIn = Float64(finallyStuckPoints[totalClipNum])
-                            sticker.timelineOut = Float64(finallyStuckPoints[totalClipNum + 1])
-                            stickers.append(sticker)
-                        }
-                    }
-                }
-            
-            
-            }
-        } else if model == .createStickersModelOnlyMusic{ //仅音乐 首尾相连播放
+        }else if (model == .createStickersModelOnlyMusic || model == .createStickersModelSpeed){ //仅音乐
             for section in sections {
                 if section.sectionType == "normal" {
 
@@ -1150,7 +1083,10 @@ extension PQStuckPointEditerController {
                                 deepCopySticker?.generateDefaultValues()
                                 //当前分段的速度
                                 var tempSpeed:Float = 1.0
-
+                                if model == .createStickersModelSpeed{
+                                    tempSpeed = (totalClipNum + clipindex) % 2 == 0 ? maxSpeed : minSpeed
+                                }
+                          
                                 if(totalClipNum + 1 + clipindex < finallyStuckPoints.count){
                                     deepCopySticker?.speedRate = tempSpeed