병합을위한 아래의 방법을 만들었습니다 (조인, 합집합, 어느 것이 맞는지 확실하지 않음, 2 개 이상에서 1 개의 오디오를 만들고 싶습니다.) 서로 후에 하나씩이 아니라 한 번에 각각을 재생하는 것). 입력으로 나는 .wav 형식의 오디오 파일을 여러 개 가지고 있으며 출력시 1 .wav 형식을 원합니다.iOS 병합 (믹스) wav 형식으로 두 개 이상의 오디오 파일
func merge(audioUrls: [NSURL], resultName : String = "result") {
let resultNameWithExtension = resultName + ".wav"
//Create AVMutableComposition Object.This object will hold our multiple AVMutableCompositionTrack.
let composition = AVMutableComposition()
//create new file to receive data
//let documentDirectoryURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first!
let outputFilePath = NSTemporaryDirectory().stringByAppendingPathComponent(resultNameWithExtension)
let fileDestinationUrl = NSURL(fileURLWithPath: outputFilePath)
print(fileDestinationUrl)
StorageManager.sharedInstance.deleteFileAtPath(NSTemporaryDirectory().stringByAppendingPathComponent(resultNameWithExtension))
var avAssets: [AVURLAsset] = []
var assetTracks: [AVAssetTrack] = []
var timeRanges: [CMTimeRange] = []
for audioUrl in audioUrls {
let compositionAudioTrack:AVMutableCompositionTrack = composition.addMutableTrackWithMediaType(AVMediaTypeAudio, preferredTrackID:kCMPersistentTrackID_Invalid)
let avAsset = AVURLAsset(URL: audioUrl, options: nil)
avAssets.append(avAsset)
let assetTrack = avAsset.tracksWithMediaType(AVMediaTypeAudio)[0]
assetTracks.append(assetTrack)
let duration = assetTrack.timeRange.duration
let timeRange = CMTimeRangeMake(kCMTimeZero, duration)
timeRanges.append(timeRange)
do {
try compositionAudioTrack.insertTimeRange(timeRange, ofTrack: assetTrack, atTime: kCMTimeZero)
} catch let error as NSError {
print("compositionAudioTrack insert error: \(error)")
}
}
let assetExport = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetPassthrough)!
assetExport.outputFileType = AVFileTypeWAVE
assetExport.outputURL = fileDestinationUrl
assetExport.exportAsynchronouslyWithCompletionHandler({
self.delegate?.assetExportSessionDidFinishExport(assetExport, outputFilePath: outputFilePath)
})
}
제 문제는 제대로 작동하지 않으며 그 이유를 모르겠습니다. 이 오류는 내가 얻을 :
{NSLocalizedDescription = 조작 가 NSLocalizedFailureReason이 작업이 미디어 지원되지 않습니다 =, 중지됨.}오류 도메인 = AVFoundationErrorDomain 코드 = -11838이 사용자 정보가 = "작업 중지")
미리 설정 및 출력 유형을 .m4a로 변경하면 작동하지만 .wav가 필요합니다. 동일한 형식의 입력이있을 때 .wav로 작업해야합니다. 어떤 도움을 주셔서 감사합니다
혼합 또는 합산 음악 세계에서 오디오를 병합하는 정확한 용어이다. –
정보 주셔서 감사합니다. 그래서 오디오 파일을 혼합해야합니다. –
나는 과거에 많은 테스트를했으며 AVAssetExportSession이 M4A 파일 이외의 다른 것을 내보낼 수 없었습니다. 귀하의 작업에 대해 AVAssetExportSession과 다른 API를 사용해야 할 수도 있습니다. – Moritz