swift: how to delete part of audio?

前端 未结 1 1468
旧时难觅i
旧时难觅i 2020-12-11 12:50

I\'m creating a simple audio editing tool to trim and delete from an audio. I implemented the trim function and it is working fine. However I searched and tried to implement

相关标签:
1条回答
  • 2020-12-11 13:33

    CMTimeRangeGetUnion returns another CMTimeRange, which is just a (start-)time and a duration. So there is nothing than can hold the two time ranges required to do what you are expecting. In extension, AVAssetExportSession has no API that takes a list of time ranges to export.

    But there is a way to accomplish it. The idea is to create an editable copy of the asset, delete the time range, and then export the editable copy. AVMutableComposition does this:

    // assuming 'asset', 'endTimeOfRange1' and 'startTimeOfRange2' from the question:
    
    // create empty mutable composition
    let composition: AVMutableComposition = AVMutableComposition()
    // copy all of original asset into the mutable composition, effectively creating an editable copy
    try composition.insertTimeRange( CMTimeRangeMake( kCMTimeZero, asset.duration), of: asset, at: kCMTimeZero)
    
    // now edit as required, e.g. delete a time range
    let startTime = CMTime(seconds: endTimeOfRange1, preferredTimescale: 100)
    let endTime = CMTime(seconds: startTimeOfRange2, preferredTimescale: 100)
    composition.removeTimeRange( CMTimeRangeFromTimeToTime( startTime, endTime))
    
    // since AVMutableComposition is an AVAsset subclass, it can be exported with AVAssetExportSession (or played with an AVPlayer(Item))
    if let exporter = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetAppleM4A) 
    {
        // configure session and exportAsynchronously as above. 
        // You don't have to set the timeRange of the exportSession
    }
    

    Note that copying from the asset to the composition only modifies some in-memory structures defining which samples go where on the time line, but doesn't actually moves any media samples around. This is not done until exporting; as result, editing is (relatively) fast, and you have to keep the source file around at least until export is finished.

    0 讨论(0)
提交回复
热议问题