zoukankan      html  css  js  c++  java
  • swift 将录制的多个aac音频合并为m4a格式音频

    //合并音频
        func mergeAudio() {
            let composition = AVMutableComposition()
            
            for i in 0 ..< audioLocalUrls.count {
                
                let compositionAudioTrack :AVMutableCompositionTrack = composition.addMutableTrack(withMediaType: AVMediaTypeAudio, preferredTrackID: CMPersistentTrackID())
                
                let asset = AVURLAsset(url: URL.init(fileURLWithPath: audioLocalUrls[i]))
                
                let track = asset.tracks(withMediaType: AVMediaTypeAudio)[0]
                
                var timeRange:CMTimeRange
                timeRange = CMTimeRange(start: CMTimeMake(0, 600), duration: track.timeRange.duration)
                
                try! compositionAudioTrack.insertTimeRange(timeRange, of: track, at: composition.duration)
            }
            
            let documentDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! as NSURL
            let stringDate = BaseController().getCurrentTime()
            self.mergeAudioURL = (documentDirectoryURL.appendingPathComponent(BaseController().randomMD5(str: stringDate) + ".m4a")! as URL as NSURL) as URL!
            
            let assetExport = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetAppleM4A)
            assetExport?.outputFileType = AVFileTypeAppleM4A
            assetExport?.outputURL = mergeAudioURL as URL
            
            assetExport?.exportAsynchronously(completionHandler:
                {
                    switch assetExport!.status
                    {
                        case AVAssetExportSessionStatus.failed:
                            print("failed (assetExport?.error)")
                        case AVAssetExportSessionStatus.cancelled:
                            print("cancelled (assetExport?.error)")
                        case AVAssetExportSessionStatus.unknown:
                            print("unknown(assetExport?.error)")
                        case AVAssetExportSessionStatus.waiting:
                            print("waiting(assetExport?.error)")
                        case AVAssetExportSessionStatus.exporting:
                            print("exporting(assetExport?.error)")
                        default:
                            print("success(assetExport?.error)")
                            
                        
                        for i in 0..<self.audioLocalUrls.count{
                            let fileManager = FileManager.default
                            try! fileManager.removeItem(at: URL.init(fileURLWithPath: self.audioLocalUrls[i]))
                        }
                    }
            })
        }
    

      

  • 相关阅读:
    JDBC基本入门-JDBC中各个接口和类详解
    Docker 安装与基本使用
    java打包和运行的方式
    使用@Valid+BindingResult进行controller参数校验
    Antd使用timePicker封装时间范围选择器(React hook版)
    antd的table组件设置Column的width列宽度不生效问题
    vector二维数组如何排序
    递归反转链表(通俗详解)
    安装pythorch出现“由于目标计算机积极拒绝,无法连接”问题
    C语言字符串
  • 原文地址:https://www.cnblogs.com/kunH/p/7358235.html
Copyright © 2011-2022 走看看