Browse Source

Merge branch 'dev' of https://git.yishihui.com/iOS/BFRecordScreenKit into dev

# Conflicts:
#	BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift
harry 3 years ago
parent
commit
2e705f279a

+ 1 - 0
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenBaseManager.swift

@@ -147,6 +147,7 @@ class BFRecordScreenBaseManager : NSObject{
             }
             
             playBGMPlayer.configPlayer(audioPathURL: URL(fileURLWithPath: dele?.bgmModel?.wavFilePath ?? ""))
+            playBGMPlayer.player?.volume = Float(dele?.bgmModel?.volume ?? 100) / 100.0
             //原背景音乐可使用时长
             let bgmSeconds = ((dele?.bgmModel?.endCMTime ?? .zero) - (dele?.bgmModel?.startCMTime ?? .zero)).seconds
             //余数

+ 3 - 105
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenCameraManager.swift

@@ -62,8 +62,6 @@ class BFRecordScreenCameraManager: BFRecordScreenBaseManager {
 
     var movieWrite: GPUImageMovieWriter?
     
-    var recordVoicePlayer:BFAudioPlayer = BFAudioPlayer.init()
-
     lazy var camera: GPUImageStillCamera? = {
         let camera = GPUImageStillCamera(sessionPreset: AVCaptureSession.Preset.hd1920x1080.rawValue, cameraPosition: AVCaptureDevice.Position.back)
         camera?.outputImageOrientation = UIInterfaceOrientation.portrait
@@ -78,10 +76,7 @@ class BFRecordScreenCameraManager: BFRecordScreenBaseManager {
     }()
 
     var groupCount = 0
-    
-    // 录音文件是否正在播放
-    var audioPlayerIsPlaying:Bool = false
-
+ 
     lazy var avplayer: AVPlayer = {
         let p = AVPlayer(playerItem: nil)
         
@@ -436,77 +431,6 @@ class BFRecordScreenCameraManager: BFRecordScreenBaseManager {
         
         startTimer(isPlay: true)
     }
-
-    func playRecordVoice(needPlay: Bool = true) {
-
-        // 三种状态值ff
-//        case paused = 0
-//        case waitingToPlayAtSpecifiedRate = 1
-//        case playing = 2
-        if (recordVoicePlayer.player?.isPlaying ?? false || audioPlayerIsPlaying){
-//            BFLog(2, message: "is playering 本次查找无效,有播放任务")
-            return
-        }
-//        BFLog(2,message: "开始查找!!!!当前进度:\(currentAssetProgress.seconds)")
-
-        // 播放音频
-        var useVoiceStickers = [PQVoiceModel]()
-        if (recordItem?.voiceChangeStickers.count ?? 0) > 0 {
-            useVoiceStickers = recordItem?.voiceChangeStickers ?? [PQVoiceModel]()
-        } else {
-            useVoiceStickers = recordItem?.voiceStickers ?? [PQVoiceModel]()
-        }
-
-        if let mod = useVoiceStickers.first(where: { m in
-            CMTimeCompare(m.startCMTime, currentAssetProgress) <= 0 && CMTimeCompare(m.endCMTime, currentAssetProgress) > 0
-
-        }) {
-            BFLog(message: "找到音频开始时间:\(mod.startCMTime.seconds)结束 \(mod.endCMTime.seconds) currentAssetProgress is \(currentAssetProgress.seconds) wavFilePath:\(mod.wavFilePath ?? "")")
-
-            // 当前播放的文件
-            if playingVoiceMode == mod {
-                BFLog(2,message: "找查到mod的已经播放完成同一个 wavFilePath:\(mod.wavFilePath ?? "")")
-                return
-            }
-            playingVoiceMode = mod
-            
-            let cureentPalyURlString = recordVoicePlayer.currentAudioPathURL?.absoluteString ?? ""
-            if cureentPalyURlString.replacingOccurrences(of: "file://", with: "") == mod.wavFilePath && audioPlayerIsPlaying{
-                BFLog(2, message: "命中的和播放的文件路径一样? wavFilePath:\(mod.wavFilePath ?? "")")
-//                audioPlayerIsPlaying = true
-//                recordVoicePlayer.playOrPause()
-                
-//                if !(audioPlayerIsPlaying) {
-////                        audioPlayerIsPlaying = true
-                    recordVoicePlayer.seekTime((currentAssetProgress - mod.startCMTime).seconds)
-////                        recordVoicePlayer.playOrPause()
-//                }
-
-
-                return
-            }
- 
-            recordVoicePlayer.delegate = self
-            recordVoicePlayer.configPlayer(audioPathURL: URL(fileURLWithPath: mod.wavFilePath))
- 
-            let tt = currentAssetProgress - mod.startCMTime
-            BFLog(1, message: "record - tt: \(tt.seconds), curr:\(currentAssetProgress.seconds) \(needPlay) rate:\(recordVoicePlayer.player?.rate  ?? -1)   \(mod.wavFilePath ?? "")")
-            if CMTimeCompare(tt, .zero) == 0 {
-                if needPlay {
-                    audioPlayerIsPlaying = true
-                    recordVoicePlayer.playOrPause()
-                }
-                return
-            }
-            audioPlayerIsPlaying = true
-            recordVoicePlayer.seekTime(tt.seconds)
-            recordVoicePlayer.playOrPause()
- 
-        } else {
-            BFLog(message: "没有找到即将播放的录制音频文件?\(currentAssetProgress.seconds)")
-        }
-    }
-
     func prepareToPlayNext(needPlay: Bool = true) {
         
         if let mod = recordItem?.videoStickers.first(where: { mode in
@@ -581,10 +505,7 @@ class BFRecordScreenCameraManager: BFRecordScreenBaseManager {
 
             BFLog(1, message: "endPlay:\(wself.currentAssetProgress.seconds), 总时长:\(wself.recordItem!.materialDuraion.seconds), currplayer:\(wself.avplayer.currentItem?.currentTime().seconds ?? 0)")
 
-            // 判断录音是否还在播放,如果在播放停止
-            if wself.recordVoicePlayer.player?.isPlaying ?? false {
-                wself.recordPlayer?.pause()
-            }
+    
 //            // 如果离结束大于0.7s,代表还有下一段视频
 //            if ((wself.recordItem?.materialDuraion ?? .zero) - wself.currentAssetProgress).seconds > 0.7 {
 ////                wself.findNextModel()
@@ -605,11 +526,6 @@ class BFRecordScreenCameraManager: BFRecordScreenBaseManager {
         super.pause()
         dispatchWorkItemIsCancel = true
         avplayer.pause()
-       
-        recordVoicePlayer.pause()
-
-        audioPlayerIsPlaying = false
-
         playingVoiceMode = nil
 
         timerr?.invalidate()
@@ -725,8 +641,6 @@ class BFRecordScreenCameraManager: BFRecordScreenBaseManager {
         checkCurrentPlayStatus()
         // 检测视频的
         prepareToPlayNext()
-        // 新的检测录音的
-//        playRecordVoice()
     }
 
     func timerForRecord(currTime _: CMTime) {
@@ -798,23 +712,7 @@ class BFRecordScreenCameraManager: BFRecordScreenBaseManager {
         movieWrite = GPUImageMovieWriter(movieURL: URL(fileURLWithPath: vpath), size: videoSize)
         filter.addTarget(movieWrite)
     }
-    
-    
-    // 播放完成
-    override func audioPlayerDidFinish(audioPlayer:BFAudioPlayer){
-        BFLog(message: "audioPlayerDidFinish")
-        audioPlayerIsPlaying = false
-        recordVoicePlayer.pause()
-    }
-    
-    // 播放开始
-    override func audioPlayerStart(audioPlayer:BFAudioPlayer){
-    }
-    // 播放进度
-    override func playProgress(audioPlayer:BFAudioPlayer,currentTime: TimeInterval, progress: Double){
-        
-//        BFLog(message: "currentTime is \(currentTime) progress\(progress) \(recordVoicePlayer.currentAudioPathURL?.absoluteString ?? "")")
-    }
+  
 }
 
 extension BFRecordScreenCameraManager: GPUImageVideoCameraDelegate {

+ 23 - 33
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -301,8 +301,8 @@ public class BFRecordScreenController: BFBaseViewController {
                                          AVEncoderBitDepthHintKey: 16, // 位深
                                          AVEncoderAudioQualityKey: AVAudioQuality.medium.rawValue] // 音频质量
 
-    public var haveSpeakVolume: Float = 0.15
-    public var noSpeakVolume: Float = 0.30
+    //原素材音量
+    public var originalVolume: Float = 0.2
 
     // 录音管理器
     var recorderManager: BFVoiceRecordManager?
@@ -632,22 +632,17 @@ public class BFRecordScreenController: BFBaseViewController {
     lazy var audioSettingView: BFAudioSettingView = {
         let audioSettingView = BFAudioSettingView(frame: CGRect(x: 0, y: 0, width: cScreenWidth, height: cScreenHeigth))
         audioSettingView.isHidden = true
-        audioSettingView.haveSpeakSlider.valueIsInt = true
-        audioSettingView.noSpeakSlider.valueIsInt = true
-        audioSettingView.callBack = { [weak self] haveSpeak, noHaveSpeak in
+        audioSettingView.musicSlider.valueIsInt = true
+        audioSettingView.originalMSlider.valueIsInt = true
+        audioSettingView.callBack = { [weak self] originalVolume, musicVolume in
 //            BFLog(1, message: "haveSpeak is:\(haveSpeak),noHaveSpeak is:\(noHaveSpeak)")
             guard let wself = self else { return }
 
-            wself.haveSpeakVolume = haveSpeak / 100.0
-            wself.noSpeakVolume = noHaveSpeak / 100.0
+            wself.bgmModel?.volume = Int(musicVolume)
+            wself.originalVolume = originalVolume / 100.0
             if !wself.isNormalPlaying, !wself.isRecording {
-                if wself.deleteRecordBtn.isHidden {
-//                    wself.recordPlayer.volume = 0
-                    wself.assetPlayer.volume = wself.noSpeakVolume
-                } else {
-//                    wself.recordPlayer.volume = 1.0
-                    wself.assetPlayer.volume = wself.haveSpeakVolume
-                }
+                
+                wself.assetPlayer.volume = wself.originalVolume
             }
         }
 
@@ -787,6 +782,7 @@ public class BFRecordScreenController: BFBaseViewController {
     override public func viewDidLoad() {
         super.viewDidLoad()
         _ = disablePopGesture()
+<<<<<<< HEAD
         
         let path = Bundle.main.path(forResource: "11111", ofType: "mp3")
         bgmModel = PQVoiceModel.init()
@@ -795,6 +791,13 @@ public class BFRecordScreenController: BFBaseViewController {
         bgmModel?.endCMTime  = CMTime.init(value: 240 * 1000_000, timescale: 1000_000)
         bgmModel?.volume = 100
 
+=======
+   
+        let doubleTapGes = UITapGestureRecognizer(target: self, action: #selector(doubleTapAction(tap:)))
+        doubleTapGes.numberOfTapsRequired = 2
+        doubleTapGes.numberOfTouchesRequired = 1
+        view.addGestureRecognizer(doubleTapGes)
+>>>>>>> c2402d0b7d3837cbda505e6074eded08f1528888
         
         // 进入活跃状态
         PQNotification.addObserver(self, selector: #selector(didBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)
@@ -2107,16 +2110,7 @@ public class BFRecordScreenController: BFBaseViewController {
     // MARK: - 音视频处理
 
     func playRecord(at currentT: CMTime, periodicTimeObserver: @escaping (_ time: CMTime, _ currentItem: AVPlayerItem) -> Void, didPlayToEndTime: @escaping (_ recordedInfo: (Int, PQVoiceModel)?, _ currentItem: AVPlayerItem?) -> Void, playFailed _: @escaping (_ recordedInfo: (Int, PQVoiceModel)?, _ currentItem: AVPlayerItem?) -> Void) {
-//        if currentPlayRecordIndex >= 0 {
-//            if assetPlayer.volume != haveSpeakVolume{
-//                assetPlayer.volume = haveSpeakVolume
-//            }
-//        }else{
-//            if assetPlayer.volume != noSpeakVolume {
-//                assetPlayer.volume = noSpeakVolume
-//            }
-//        }
-        
+ 
         //add by ak 使用的音频数据
         let  useVoiceStickers = itemModels[currItemModelIndex].getUsedVoices()
         
@@ -2124,12 +2118,8 @@ public class BFRecordScreenController: BFBaseViewController {
         if itemModels[currItemModelIndex].voiceStickers.first(where: { m in
             CMTimeCompare(m.startCMTime, currentT) <= 0 && CMTimeCompare(currentT, m.endCMTime) <= 0
         }) != nil {
-            if assetPlayer.volume != haveSpeakVolume {
-                assetPlayer.volume = haveSpeakVolume
-            }
-        } else {
-            if assetPlayer.volume != noSpeakVolume {
-                assetPlayer.volume = noSpeakVolume
+            if assetPlayer.volume != originalVolume {
+                assetPlayer.volume = originalVolume
             }
         }
 //        BFLog(1, message: "volume:\(assetPlayer.volume ?? -1)")
@@ -2179,7 +2169,7 @@ public class BFRecordScreenController: BFBaseViewController {
                 wself.hadPrepareToPlayRecord = false
                 wself.currentPlayRecordIndex = -1
 //                wself.recordPlayer.volume = 0
-//                wself.assetPlayer.volume = wself.noSpeakVolume
+//                wself.assetPlayer.volume = wself.musicVolume
                 BFLog(3, message: "播放结束")
                 didPlayToEndTime((shouldPlayRecordIndex, recordedAudio), newItem)
             }
@@ -2250,8 +2240,6 @@ public class BFRecordScreenController: BFBaseViewController {
                             
                             if finished, wself.isNormalPlaying {
                                 wself.recordPlayer.play()
-//                                wself.recordPlayer.volume = 1
-//                                wself.assetPlayer.volume = wself.haveSpeakVolume ?? 0
                                 BFLog(1, message: "录音开始播放 playing, \(second), \(CMTimeGetSeconds(wself.recordPlayer.currentItem?.duration ?? .zero)), \(wself.recordPlayer.currentItem?.currentTime().seconds ?? 0)")
                             }
                         })
@@ -2647,6 +2635,8 @@ public class BFRecordScreenController: BFBaseViewController {
     }
     
     func hadChoosed(music:PQVoiceModel?) {
+        bgmModel = music
+
         if let model = music {
             if let title = model.musicName {
                 addMusicBtn.setTitle(title, for: .normal)

+ 65 - 64
BFRecordScreenKit/Classes/RecordScreen/View/BFAudioSettingView.swift

@@ -10,7 +10,8 @@ import BFMediaKit
 import BFUIKit
 import Foundation
 
-typealias BFAudioSettingViewCallBack = (_ haveSpeak: Float, _ noHaveSpeak: Float) -> Void
+// 1,原声音量  2,音乐音量
+typealias BFAudioSettingViewCallBack = (_ originalVolume: Float, _ musicVolume: Float) -> Void
 
 class BFAudioSettingView: UIView {
     var callBack: BFAudioSettingViewCallBack?
@@ -18,75 +19,75 @@ class BFAudioSettingView: UIView {
     // 操作板背景
     let backView = UIView()
     // 标题
-    public lazy var haveSpeakLab: UILabel = {
-        let haveSpeakLab = UILabel()
-        haveSpeakLab.font = UIFont.boldSystemFont(ofSize: 16)
-        haveSpeakLab.textAlignment = .left
-        haveSpeakLab.text = "sound_record_ture".BFLocale
-        haveSpeakLab.textColor = .white
-        haveSpeakLab.backgroundColor = .clear
-        return haveSpeakLab
+    public lazy var originalMLab: UILabel = {
+        let originalMLab = UILabel()
+        originalMLab.font = UIFont.boldSystemFont(ofSize: 16)
+        originalMLab.textAlignment = .left
+        originalMLab.text = "原声"
+        originalMLab.textColor = .white
+        originalMLab.backgroundColor = .clear
+        return originalMLab
     }()
 
     // 有录音
-    lazy var haveSpeakSlider: BFUISlider = {
-        let haveSpeakSlider = BFUISlider()
+    lazy var originalMSlider: BFUISlider = {
+        let originalMSlider = BFUISlider()
         let thbImage = UIImage.moduleImage(named: BFConfig.shared.silderPinUsedImageName, moduleName: "BFFramework", isAssets: false)
-        haveSpeakSlider.setMinimumTrackImage(thbImage, for: .normal)
-        haveSpeakSlider.setMaximumTrackImage(thbImage, for: .normal)
-        haveSpeakSlider.setThumbImage(thbImage, for: .highlighted)
-        haveSpeakSlider.setThumbImage(thbImage, for: .normal)
-        haveSpeakSlider.maximumTrackTintColor = UIColor.hexColor(hexadecimal: "#E6E8E8")
-        haveSpeakSlider.minimumTrackTintColor = UIColor.hexColor(hexadecimal: BFConfig.shared.styleColor.rawValue)
-        haveSpeakSlider.tag = 10
-        haveSpeakSlider.unit = "%"
+        originalMSlider.setMinimumTrackImage(thbImage, for: .normal)
+        originalMSlider.setMaximumTrackImage(thbImage, for: .normal)
+        originalMSlider.setThumbImage(thbImage, for: .highlighted)
+        originalMSlider.setThumbImage(thbImage, for: .normal)
+        originalMSlider.maximumTrackTintColor = UIColor.hexColor(hexadecimal: "#E6E8E8")
+        originalMSlider.minimumTrackTintColor = UIColor.hexColor(hexadecimal: BFConfig.shared.styleColor.rawValue)
+        originalMSlider.tag = 10
+        originalMSlider.unit = "%"
 //        speechSlidView.addTarget(self, action: #selector(sliderTouchEnded(sender:)), for: .touchUpInside)
-        haveSpeakSlider.maximumValue = 100
-        haveSpeakSlider.minimumValue = 0
-        haveSpeakSlider.isMovePoint = false
-        haveSpeakSlider.valueTextColor = UIColor.hexColor(hexadecimal: BFConfig.shared.styleColor.rawValue)
-        haveSpeakSlider.value = 15
-        haveSpeakSlider.valueChangedHandle = { [weak self] sender in
+        originalMSlider.maximumValue = 100
+        originalMSlider.minimumValue = 0
+        originalMSlider.isMovePoint = false
+        originalMSlider.valueTextColor = UIColor.hexColor(hexadecimal: BFConfig.shared.styleColor.rawValue)
+        originalMSlider.value = 20
+        originalMSlider.valueChangedHandle = { [weak self] sender in
             if self?.callBack != nil {
-                self?.callBack!(sender.value, self?.noSpeakSlider.value ?? 0)
+                self?.callBack!(sender.value, self?.musicSlider.value ?? 0)
             }
         }
-        return haveSpeakSlider
+        return originalMSlider
     }()
 
     // 标题
-    public lazy var noSpeakLab: UILabel = {
-        let noSpeakLab = UILabel()
-        noSpeakLab.font = UIFont.boldSystemFont(ofSize: 16)
-        noSpeakLab.textAlignment = .left
-        noSpeakLab.text = "sound_record_false".BFLocale
-        noSpeakLab.textColor = .white
-        return noSpeakLab
+    public lazy var musicLab: UILabel = {
+        let musicLab = UILabel()
+        musicLab.font = UIFont.boldSystemFont(ofSize: 16)
+        musicLab.textAlignment = .left
+        musicLab.text = "音乐"
+        musicLab.textColor = .white
+        return musicLab
     }()
 
-    lazy var noSpeakSlider: BFUISlider = {
-        let noSpeakSlider = BFUISlider()
+    lazy var musicSlider: BFUISlider = {
+        let musicSlider = BFUISlider()
         let thbImage = UIImage.moduleImage(named: BFConfig.shared.silderPinUsedImageName, moduleName: "BFFramework", isAssets: false)
-        noSpeakSlider.setMinimumTrackImage(thbImage, for: .normal)
-        noSpeakSlider.setMaximumTrackImage(thbImage, for: .normal)
-        noSpeakSlider.setThumbImage(thbImage, for: .highlighted)
-        noSpeakSlider.setThumbImage(thbImage, for: .normal)
-        noSpeakSlider.maximumTrackTintColor = UIColor.hexColor(hexadecimal: "#E6E8E8")
-        noSpeakSlider.minimumTrackTintColor = UIColor.hexColor(hexadecimal: BFConfig.shared.styleColor.rawValue)
-        noSpeakSlider.tag = 20
-        noSpeakSlider.isMovePoint = false
+        musicSlider.setMinimumTrackImage(thbImage, for: .normal)
+        musicSlider.setMaximumTrackImage(thbImage, for: .normal)
+        musicSlider.setThumbImage(thbImage, for: .highlighted)
+        musicSlider.setThumbImage(thbImage, for: .normal)
+        musicSlider.maximumTrackTintColor = UIColor.hexColor(hexadecimal: "#E6E8E8")
+        musicSlider.minimumTrackTintColor = UIColor.hexColor(hexadecimal: BFConfig.shared.styleColor.rawValue)
+        musicSlider.tag = 20
+        musicSlider.isMovePoint = false
 //        speechSlidView.addTarget(self, action: #selector(sliderTouchEnded(sender:)), for: .touchUpInside)
-        noSpeakSlider.maximumValue = 100
-        noSpeakSlider.minimumValue = 0
-        noSpeakSlider.unit = "%"
-        noSpeakSlider.valueTextColor = UIColor.hexColor(hexadecimal: BFConfig.shared.styleColor.rawValue)
-        noSpeakSlider.value = 30
-        noSpeakSlider.valueChangedHandle = { [weak self] sender in
+        musicSlider.maximumValue = 100
+        musicSlider.minimumValue = 0
+        musicSlider.unit = "%"
+        musicSlider.valueTextColor = UIColor.hexColor(hexadecimal: BFConfig.shared.styleColor.rawValue)
+        musicSlider.value = 20
+        musicSlider.valueChangedHandle = { [weak self] sender in
             if self?.callBack != nil {
-                self?.callBack!(self?.haveSpeakSlider.value ?? 0, sender.value)
+                self?.callBack!(self?.originalMSlider.value ?? 0, sender.value)
             }
         }
-        return noSpeakSlider
+        return musicSlider
     }()
 
     override init(frame: CGRect) {
@@ -104,31 +105,31 @@ class BFAudioSettingView: UIView {
             make.height.equalTo(220)
         }
 
-        backView.addSubview(haveSpeakSlider)
-        backView.addSubview(noSpeakSlider)
-        backView.addSubview(haveSpeakLab)
-        backView.addSubview(noSpeakLab)
+        backView.addSubview(originalMSlider)
+        backView.addSubview(musicSlider)
+        backView.addSubview(originalMLab)
+        backView.addSubview(musicLab)
 
-        haveSpeakLab.snp.makeConstraints { make in
+        originalMLab.snp.makeConstraints { make in
             make.left.equalToSuperview().offset(16)
             make.right.equalToSuperview().offset(-16)
             make.top.equalToSuperview().offset(25)
         }
-        haveSpeakSlider.snp.makeConstraints { make in
+        originalMSlider.snp.makeConstraints { make in
             make.left.equalToSuperview().offset(16)
             make.right.equalToSuperview().offset(-16)
-            make.top.equalTo(haveSpeakLab).offset(24)
+            make.top.equalTo(originalMLab).offset(24)
         }
 
-        noSpeakLab.snp.makeConstraints { make in
+        musicLab.snp.makeConstraints { make in
             make.left.equalToSuperview().offset(16)
             make.right.equalToSuperview().offset(-16)
-            make.top.equalTo(haveSpeakSlider).offset(42)
+            make.top.equalTo(originalMSlider).offset(42)
         }
-        noSpeakSlider.snp.makeConstraints { make in
+        musicSlider.snp.makeConstraints { make in
             make.left.equalToSuperview().offset(16)
             make.right.equalToSuperview().offset(-16)
-            make.top.equalTo(noSpeakLab).offset(24)
+            make.top.equalTo(musicLab).offset(24)
         }
     }
 
@@ -145,7 +146,7 @@ class BFAudioSettingView: UIView {
         if !backView.bounds.contains(tap.location(in: backView)) {
             isHidden = true
             if callBack != nil {
-                callBack!(haveSpeakSlider.value, noSpeakSlider.value)
+                callBack!(originalMSlider.value, musicSlider.value)
             }
         }
     }