Тишина не добавляется в конец аудиофайла

Я работаю над демонстрацией того, как добавить дополнительный звук тишины в конце данного аудиофайла.

здесь длина моего аудиофайла составляет 29 секунд. & я добавляю 11-секундную тишину. таким образом, окончательная длина выходного аудио будет 40 секунд.

Вот моя функция,

func addSilenceInAudio(inputFilePath:URL, silenceTime: Int, minimumAudioLength: Int, completionBlock:@escaping ((String?, Error?) -> Void)) {

        let asset = AVURLAsset(url: inputFilePath, options: nil)

        //get an original audio length

        let endAudioTime = CMTimeMake(value: Int64(silenceTime), timescale: 1)

        let composition = AVMutableComposition()

        let insertAt = CMTimeRange(start: CMTime.zero , end: endAudioTime)
        let assetTimeRange = CMTimeRange(start: CMTime.zero, end:asset.duration)

        //here i'm inserting range
        try! composition.insertTimeRange(assetTimeRange, of: asset, at: insertAt.end)

        let exportSessionNew = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetAppleM4A)
        exportSessionNew?.outputFileType = AVFileType.m4a
        let documentURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
        let dateString = (Date().millisecondsSince1970) //added file name here
        let outputURL = documentURL.appendingPathComponent("\(dateString).m4a") //file name must be .m4a
        exportSessionNew?.outputURL = outputURL //output url

        exportSessionNew?.exportAsynchronously(completionHandler: {
            () -> Void in
            print(exportSessionNew as Any)
            if exportSessionNew!.status == AVAssetExportSession.Status.completed  {
                // All is working fine!!
                print(exportSessionNew?.outputURL as Any) //get outputfile
                print("success")
                completionBlock("\(String(describing: exportSessionNew?.outputURL))", nil)
            } else {
                print("failed")
                completionBlock(nil, exportSessionNew?.error)
            }
        })
    }

приведенный выше код работает нормально, и я получаю выходной звук за 40 секунд.

но Проблема в том, что при запуске аудиофайла добавляется 11-секундная тишина.

он должен быть в конце аудиофайла.

Я делаю что-то не так здесь?


person Ketan Odedra    schedule 07.02.2020    source источник


Ответы (1)


В основном вам нужно только увеличить длину аудио.

So...

let assetTimeRange = CMTimeRange(start: CMTime.zero, end:asset.duration)

изменить на что-то вроде

let newDuration = asset.duration + silenceTime
let assetTimeRange = CMTimeRange(start: CMTime.zero, end:newDuration)

Отказ от ответственности: это было некоторое время, так как я сделал это

person Scriptable    schedule 07.02.2020
comment
Спасибо, @Scriptable за ответ. Я уже пробовал вышеприведенную логику, но, к сожалению, вышеприведенная логика не работает, она по-прежнему дает мне тот же результат. - person Ketan Odedra; 10.02.2020