Swift AVMutableComposition和AKAudioFiles仅导出第一首曲目

Swift AVMutableComposition和AKAudioFiles仅导出第一首曲目,swift,audiokit,avmutablecomposition,avkit,Swift,Audiokit,Avmutablecomposition,Avkit,我最近一直在努力让AVMutableComposition在我的合成器应用程序中工作。我在没有Audiokit的情况下实现了一个类似下面的函数,它工作得非常好。然而,当我运行下面的函数时,我只能在这里看到文件中的第一个文件,即输出的AKAudioFile中的arrray。这是AkaAudioFile如何复制的问题还是AVMutableComposition如何工作的问题 private func createCombinedRecordingFrom(_ files: [AKAudioFile]

我最近一直在努力让AVMutableComposition在我的合成器应用程序中工作。我在没有Audiokit的情况下实现了一个类似下面的函数,它工作得非常好。然而,当我运行下面的函数时,我只能在这里看到文件中的第一个文件,即输出的AKAudioFile中的arrray。这是AkaAudioFile如何复制的问题还是AVMutableComposition如何工作的问题

private func createCombinedRecordingFrom(_ files: [AKAudioFile], completion: @escaping (AKAudioFile?) -> ()) {
    let composition = AVMutableComposition()

    for file in files {
        let asset = file.avAsset

        let timeRange = CMTimeRange(start: kCMTimeZero, duration: asset.duration)
        let track = composition.addMutableTrack(withMediaType: .audio,
                                                preferredTrackID: kCMPersistentTrackID_Invalid)
        do {
            try track?.insertTimeRange(timeRange, of: asset.tracks[0], at: kCMTimeZero)
        } catch {
            print(error.localizedDescription)
            completion(nil)
        }
    }

    let assetExport = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetAppleM4A)!
    assetExport.audioTimePitchAlgorithm = .spectral
    assetExport.outputFileType = .m4a

    let temporaryURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(UUID().uuidString).appendingPathExtension("m4a")
    assetExport.outputURL = temporaryURL
    assetExport.exportAsynchronously() {
        do {
            let audioFile = try AKAudioFile(forReading: temporaryURL)
            completion(audioFile)
        } catch {
            print(error.localizedDescription)
            completion(nil)
        }
    }
}