如何在iOS中撰写两个音频文件

可以从此链接下载本教程的示例代码。 https://github.com/ashusharma046/AudioSample

要在iOS中组合两个音频文件,我们需要使用AVMutableComposition类,它允许我们合并两个音频文件。

在示例代码中,我们使用了来自本地资源的两个音频文件a1.mp3和a2.mp3,如图所示。

要合并曲目,我们需要从中读取资源

用于创建第一首曲目的AVURLAsset对象的代码段

 让urlFirst = URL.init(fileURLWithPath:Bundle.main.path(forResource:“ a1”,ofType:“ mp3”)!) 
 让audioAssetFirst = AVURLAsset(URL:urlFirst,选项:无) 

对于第二首曲目也是如此

 让urlSecond = URL.init(fileURLWithPath:Bundle.main.path(forResource:“ a2”,ofType:“ mp3”)!) 
 让audioAssetSecond = AVURLAsset(URL:urlSecond,选项:无) 

合并曲目的代码段

 让composition = AVMutableComposition() 
 让audioTrack:AVMutableCompositionTrack吗?  = composition.addMutableTrack(withMediaType:AVMediaTypeAudio,preferredTrackID:kCMPersistentTrackID_Invalid) 
  var错误:错误? 
 尝试?  audioTrack?.insertTimeRange(CMTimeRangeMake(kCMTimeZero,audioAssetFirst.duration),从:audioAssetFirst.tracks(withMediaType:AVMediaTypeAudio)[0],在:kCMTimeZero) 
 如果错误!= nil { 
  print(“ \(String(describing:error?.localizedDescription))”) 
  } 
 尝试?  audioTrack?.insertTimeRange(CMTimeRangeMake(kCMTimeZero,audioAssetSecond.duration),从:audioAssetSecond.tracks(withMediaType:AVMediaTypeAudio)[0],在:kCMTimeZero) 
 如果错误!= nil { 
  print(“ \(String(describing:error?.localizedDescription))”) 
  } 

将合并的音轨导出到特定路径

  let _assetExport = AVAssetExportSession(资产:组成,预设名称:AVAssetExportPresetAppleM4A) 
  let mixedAudio:字符串=“ mixedAudioF.m4a” 
  exportPath = NSTemporaryDirectory()+(mixedAudio) 
 让exportURL = URL(fileURLWithPath:exportPath) 
 如果FileManager.default.fileExists(atPath:exportPath){ 
 尝试?  FileManager.default.removeItem(atPath:exportPath) 
  } 
  _assetExport?.outputFileType = AVFileTypeAppleM4A 
  _assetExport?.outputURL = exportURL 
  _assetExport?.shouldOptimizeForNetworkUse = true 
  _assetExport?.exportAsynchronously(completionHandler:{()->在 
 打印(“成功完成”) 
  })