如何将.caf音频文件转换为swift中的.mp4文件

时间:2017-08-31 06:49:36

标签: ios swift xcode avaudiorecorder avassetexportsession

我使用设备麦克风录制音频,其中AVAssetExportSession .caf 格式返回文件,该格式仅可在Apple设备上播放,但不能在Android设备上播放。由于Apple不支持 .mp3 文件,因此我希望在上传到服务器之前将其转换为 .mp4 格式。 .mp4 仅适用于音频吗?我可以使用func setupAudioRecorder () { let fileMgr = FileManager.default let dirPaths = fileMgr.urls(for:.documentDirectory, in:.userDomainMask) let soundFileURL = dirPaths[0].appendingPathComponent("myaudio.caf") let recordSettings = [AVEncoderAudioQualityKey: AVAudioQuality.min.rawValue, AVEncoderBitRateKey: 16, AVNumberOfChannelsKey: 2, AVSampleRateKey: 44100.0] as [String : Any] do { try audioSession.setCategory( AVAudioSessionCategoryPlayAndRecord) } catch let error as NSError { print("audioSession error: \(error.localizedDescription)") } do { try audioRecorder = AVAudioRecorder(url: soundFileURL, settings: recordSettings as [String : AnyObject]) audioRecorder?.prepareToRecord() } catch let error as NSError { print("audioSession error: \(error.localizedDescription)") } } 转换它吗?

以下是录音机代码:

{{1}}

2 个答案:

答案 0 :(得分:4)

经过大量搜索,我可以使用这段代码将 .caf 转换为 .mp4

    let audioURL = ".caf audio file url"

    let fileMgr = FileManager.default

    let dirPaths = fileMgr.urls(for: .documentDirectory,
                                in: .userDomainMask)

    let outputUrl = dirPaths[0].appendingPathComponent("audiosound.mp4")

    let asset = AVAsset.init(url: audioURL)

    let exportSession = AVAssetExportSession.init(asset: asset, presetName: AVAssetExportPresetHighestQuality)

    // remove file if already exits
    let fileManager = FileManager.default
    do{
        try? fileManager.removeItem(at: outputUrl)

    }catch{
        print("can't")
    }


    exportSession?.outputFileType = AVFileTypeMPEG4

    exportSession?.outputURL = outputUrl

    exportSession?.metadata = asset.metadata

    exportSession?.exportAsynchronously(completionHandler: {
        if (exportSession?.status == .completed)
        {
            print("AV export succeeded.")

           // outputUrl to post Audio on server

        }
        else if (exportSession?.status == .cancelled)
        {
            print("AV export cancelled.")
        }
        else
        {
            print ("Error is \(String(describing: exportSession?.error))")

        }
    })

答案 1 :(得分:0)

您可以直接在MPEG4 AAC中录制而无需添加步骤进行转换。将AVFormatIDKeykAudioFormatMPEG4AAC值一起使用,并将采样率降至8000或16000。