Android 合并mp4与m4a,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..

let fileManager = FileManager.default

try! fileManager.removeItem(at: URL.init(fileURLWithPath: self.audioLocalUrls[i]))

}

}

})

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值