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

      

  • 相关阅读:
    团队开发冲刺第二十天
    团队开发冲刺第十九天
    第十六周进度总结
    学期课后个人总结
    用户场景分析
    第十五周进度总结
    对正在使用的输入法进行评价
    java中实现客户姓名添加和显示
    指定查找区间,查找学生姓名并显示是否修改成功
    linux下如何修改文件的权限chmod
  • 原文地址:https://www.cnblogs.com/kunH/p/7358235.html
Copyright © 2011-2022 走看看