|
@@ -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){
|