• 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]))
                        }
                    }
            })
        }
    

      

  • 相关阅读:
    C++第11课 迭代器与仿函数 (二)
    C++第11课 迭代器与仿函数 (一)
    Python语法的应用
    Python面试
    02_Python之基础编程
    01_Python之_学前准备
    Sorting It All Out (拓扑排序) poj1094
    Codeforces Global Round 13 Editorial补题
    今天做题做到了并查集相关的内容~简单介绍一下关于并查集的东西
    留言板
  • 原文地址:https://www.cnblogs.com/kunH/p/7358235.html
Copyright © 2020-2023  润新知