Обрезка аудиофайлов не работает

в моем приложении я обрезаю аудиофайл.

но он не работает каждый раз, когда он показывает мне, что не удалось

это мой код

 @IBAction func trimAudioPressed(sender: AnyObject) {

    isTrim = true

    let audioFileInput = filepath

    let date = NSDate()
    let formatter = NSDateFormatter()
    formatter.dateFormat = "yyyy_MMM_dd_HH_mm_ss"
    let strdate = formatter.stringFromDate(date)

    print(NSUserDefaults.standardUserDefaults().valueForKey("fileURL"))

    let extensionofFile = filepath.pathExtension!

    let strOutputFilePath123 : String = String(filepath.URLByDeletingLastPathComponent!)

    strOutputFilePath = "\(strOutputFilePath123)\(strdate).\(extensionofFile)"

    let fileManger = NSFileManager.defaultManager()
    if fileManger.fileExistsAtPath(strOutputFilePath) {
        do {
            (try fileManger.removeItemAtPath(strOutputFilePath))
        }
        catch let error { print(error)
        }
    }

    let audioFileOutput : NSURL = NSURL(string: strOutputFilePath)!

    let asset = AVAsset(URL: audioFileInput)

    let succcess = self.exportAsset(asset, toFilePath: strOutputFilePath)
    print(succcess)

    self.dismissView()

}



func exportAsset(avAsset: AVAsset, toFilePath filePath: String) -> Bool {
    var tracks = avAsset.tracksWithMediaType(AVMediaTypeAudio)
    if tracks.count == 0 {
        return false
    }
    let track = tracks[0]

    let exportSession = AVAssetExportSession(asset: avAsset, presetName: AVAssetExportPresetAppleM4A)

    let supportedTypeArray = exportSession!.supportedFileTypes
    for str: String in supportedTypeArray {

        if nil == exportSession {
            return false
        }
    }
    print(leftV)
    print(rightV)
    let startTime = CMTimeMake(Int64(leftV), 1)
    let stopTime = CMTimeMake(Int64(rightV), 1)

    let exportTimeRange = CMTimeRangeFromTimeToTime(startTime, stopTime)
    let exportAudioMix = AVMutableAudioMix()

     let exportAudioMixInputParameters = AVMutableAudioMixInputParameters(track: track)

    exportAudioMix.inputParameters = [exportAudioMixInputParameters]
    exportSession!.outputURL = NSURL.fileURLWithPath(filePath)

    exportSession!.outputFileType = AVFileTypeAppleM4A

    exportSession!.timeRange = exportTimeRange

    exportSession!.audioMix = exportAudioMix

    exportSession!.exportAsynchronouslyWithCompletionHandler({() -> Void in
        if .Completed == exportSession!.status {
            print("Success")

        }
        else if .Failed == exportSession!.status {
            print("Failed")
            print("Export Session Status: \(exportSession!.status)")

        }
        else {

            print("Export Session Status: \(exportSession!.status)")
        }

    })
    return true
}

я не знаю, где все идет не так

вот мой путь к входному файлу строки

file:///private/var/mobile/Containers/Data/Application/07166600-AAEA-436F-BE6B-93839C180F19/Documents/Default/recording-2016-08-31-18-28-12.m4a

вот мой путь к выходному файлу

file:///private/var/mobile/Containers/Data/Application/07166600-AAEA-436F-BE6B-93839C180F19/Documents/Default/2016_Aug_31_18_38_31.m4a

или даже время начала и время остановки также идеально. так как я могу это решить. и позвольте мне узнать, есть ли другой подход.

это ошибка, которую я получил

export failed Optional(Error Domain=NSURLErrorDomain Code=-3000 "Cannot create file" UserInfo={NSLocalizedDescription=Cannot create file, NSUnderlyingError=0x7fc9415142b0 {Error Domain=NSOSStatusErrorDomain Code=-12115 "(null)"}})

person Jack.Right    schedule 31.08.2016    source источник
comment
Какую ошибку вы получаете?   -  person Max Pevsner    schedule 31.08.2016
comment
нет ошибок, приятель, он просто попадает в этот цикл .Failed == exportSession! .status   -  person Jack.Right    schedule 31.08.2016
comment
Каков статус?   -  person Max Pevsner    schedule 31.08.2016
comment
вам нужно удалить URL-адрес в сеансе экспорта. Попробуй это.   -  person JAck    schedule 31.08.2016
comment
что такое leftv и rightv?   -  person Rhythmic Fistman    schedule 01.09.2016
comment
его 0 и 5 @RhythmicFistman   -  person Jack.Right    schedule 01.09.2016


Ответы (1)


Линия

exportSession!.outputURL = NSURL.fileURLWithPath(filePath)

неправильно. filePath - это не путь; это уже file:// URL.

Быстрое решение - изменить outputURL на это:

exportSession!.outputURL = NSURL(string: filePath)!

В этом коде есть путаница между путями к файлам и URL-адресами файлов. например filepath - это файл NSURL, но strOutputFilePath123 - это String, который содержит file:// URI схемы.

Чтобы преобразовать файл NSURL в путь String, вы должны использовать url.path.

person Rhythmic Fistman    schedule 01.09.2016