Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios AVAssetTrack看不到AVMediaTypeAudio_Ios_Swift_Avfoundation_Assets - Fatal编程技术网

Ios AVAssetTrack看不到AVMediaTypeAudio

Ios AVAssetTrack看不到AVMediaTypeAudio,ios,swift,avfoundation,assets,Ios,Swift,Avfoundation,Assets,我是swift和编程新手,我尝试连接一些录音机文件,我成功地制作了这些文件: func concatenateFiles(audioFiles: [URL], completion: @escaping (_ concatenatedFile: NSURL?) -> ()) { // Result file var nextClipStartTime = kCMTimeZero let composition = AVMutableComposition()

我是swift和编程新手,我尝试连接一些录音机文件,我成功地制作了这些文件:

func concatenateFiles(audioFiles: [URL], completion: @escaping (_ concatenatedFile: NSURL?) -> ()) {
    // Result file
    var nextClipStartTime = kCMTimeZero
    let composition = AVMutableComposition()
    let track = composition.addMutableTrack(withMediaType: AVMediaTypeAudio, preferredTrackID: kCMPersistentTrackID_Invalid)

    // Add each track
    for audio in audioFiles {
        let asset = AVURLAsset(url: NSURL(fileURLWithPath: audio.path) as URL, options: nil)
        if let assetTrack = asset.tracks(withMediaType: AVMediaTypeAudio).first {
            let timeRange = CMTimeRange(start: kCMTimeZero, duration: asset.duration)
            do {
                try track.insertTimeRange(timeRange, of: assetTrack, at: nextClipStartTime)
                nextClipStartTime = CMTimeAdd(nextClipStartTime, timeRange.duration)
            } catch {
                print("Error concatenating file - \(error)")
                completion(nil)
                return
            }
        }
    }

    // Export the new file
    if let exportSession = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetAppleM4A) {
        let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)

        let format = DateFormatter()
        format.dateFormat = "yyyy:MM:dd-HH:mm:ss"
        let currentFileName = "REC:\(format.string(from: Date()))"

        let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]


        let fileURL = documentsDirectory.appendingPathComponent("\(currentFileName).m4a")
            // Remove existing file
        do {
            print(audioFiles.count)
            try FileManager.default.removeItem(atPath: fileURL.path)
            print("Removed \(fileURL)")
        } catch {
            print("Could not remove file - \(error)")
        }

        // Configure export session output
        exportSession.outputURL = fileURL as URL
        exportSession.outputFileType = AVFileTypeAppleM4A
        // Perform the export
        exportSession.exportAsynchronously() { () -> Void in
                switch exportSession.status
                {
                case AVAssetExportSessionStatus.completed:
                    print("Export complete")
                    DispatchQueue.main.async(execute: {
                        if self.concatinatedArray == nil
                        {
                            self.concatinatedArray = [URL]()
                        }
                        self.concatinatedArray?.append(exportSession.outputURL!)
                        completion(fileURL as NSURL?)
                    })
                    return print("success to Merge Video")
                case AVAssetExportSessionStatus.failed:
                    completion(nil)
                    return print("failed to MERGE )")
                case AVAssetExportSessionStatus.cancelled:
                    completion(nil)
                    return print("cancelled merge)")
                default:
                    print("complete")
                }
        }
    }
}
但现在,当我想将其与视频合并时,我在那个一刻遇到了崩溃:

    let aAudioAssetTrack: AVAssetTrack = aAudioAsset.tracks(withMediaType: AVMediaTypeAudio)[0]
我使用标准的合并方法,它可以与我拥有的其他声音一起工作,而不仅仅是连接的音频文件。。请帮助如何管理它工作

AVURLAsset* avAsset = [[AVURLAsset alloc]initWithURL:[NSURL fileURLWithPath:path2] options:nil];

 if ([[avAsset tracksWithMediaType:AVMediaTypeAudio] count] > 0)
{
    AVAssetTrack *clipAudioTrack = [[avAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
    [firstTrackAudio insertTimeRange:CMTimeRangeMake(kCMTimeZero, avAsset.duration) ofTrack:clipAudioTrack atTime:kCMTimeZero error:nil];
}