快速添加或连接音频文件

间谍邮编

嗨,我想附加语音文件。

我正在用AVAudioRecorder录制语音,但是要播放录音,我需要叫“停止”,但是在播放之后,我要继续录音。就像本地的iOS语音备忘录应用一样。

我应该使用AVMutableCompositionTrack吗?如何快速使用?谢谢!

阿拉娜·道格拉斯

如果您只是想暂停录音并在以后继续录音,可以使用AVAudioRecorder的pause()函数而不是stop(),当您再次使用play()时它将继续录音。

但是,如果您要实际连接音频文件,可以这样做:

func concatenateFiles(audioFiles: [NSURL], completion: (concatenatedFile: NSURL?) -> ()) {
    guard audioFiles.count > 0 else {
        completion(concatenatedFile: nil)
        return
    }

    if audioFiles.count == 1 {
        completion(concatenatedFile: audioFiles.first)
        return
    }

    // Concatenate audio files into one file
    var nextClipStartTime = kCMTimeZero
    let composition = AVMutableComposition()
    let track = composition.addMutableTrackWithMediaType(AVMediaTypeAudio, preferredTrackID: kCMPersistentTrackID_Invalid)

    // Add each track
    for recording in audioFiles {
        let asset = AVURLAsset(URL: NSURL(fileURLWithPath: recording.path!), options: nil)
        if let assetTrack = asset.tracksWithMediaType(AVMediaTypeAudio).first {
            let timeRange = CMTimeRange(start: kCMTimeZero, duration: asset.duration)
            do {
                try track.insertTimeRange(timeRange, ofTrack: assetTrack, atTime: nextClipStartTime)
                nextClipStartTime = CMTimeAdd(nextClipStartTime, timeRange.duration)
            } catch {
                print("Error concatenating file - \(error)")
                completion(concatenatedFile: nil)
                return
            }
        }
    }

    // Export the new file
    if let exportSession = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetPassthrough) {
        let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
        let documents = NSURL(string: paths.first!)

        if let fileURL = documents?.URLByAppendingPathComponent("file_name.caf") {
            // Remove existing file
            do {
                try NSFileManager.defaultManager().removeItemAtPath(fileURL.path!)
                print("Removed \(fileURL)")
            } catch {
                print("Could not remove file - \(error)")
            }

            // Configure export session output
            exportSession.outputURL = NSURL.fileURLWithPath(fileURL.path!)
            exportSession.outputFileType = AVFileTypeCoreAudioFormat

            // Perform the export
            exportSession.exportAsynchronouslyWithCompletionHandler() { handler -> Void in
                if exportSession.status == .Completed {
                    print("Export complete")
                    dispatch_async(dispatch_get_main_queue(), {
                        completion(file: fileURL)
                    })
                    return
                } else if exportSession.status == .Failed {
                    print("Export failed - \(exportSession.error)")
                }

                completion(concatenatedFile: nil)
                return
            }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

连接音频文件

来自分类Dev

从目录快速播放音频文件

来自分类Dev

需要帮助将音频文件快速添加到按钮

来自分类Dev

快速从音频文件中删除音频通道

来自分类Dev

Phoenix Js和音频文件添加

来自分类Dev

如何快速播放mp4音频文件?

来自分类Dev

使用ffmpeg连接多个视频和音频文件

来自分类Dev

使用ffmpeg连接多个视频和音频文件

来自分类Dev

验证音频文件

来自分类Dev

提供音频文件

来自分类Dev

识别音频文件

来自分类Dev

为我的音频文件添加混响效果

来自分类Dev

Tiptoi Ravensburger-如何添加新的音频文件?

来自分类Dev

向和mkv视频添加音频文件

来自分类Dev

从音频文件创建视频文件,并从音频添加可视化效果

来自分类Dev

将音频文件拆分

来自分类Dev

从PHP读取音频文件

来自分类Dev

ReCaptcha下载音频文件?

来自分类Dev

拿起Android音频文件

来自分类Dev

回形针音频文件上传

来自分类Dev

从Powerpoint提取音频文件

来自分类Dev

不含标题的音频文件

来自分类Dev

SpriteKit覆盖音频文件

来自分类Dev

FFmpeg跳过音频文件

来自分类Dev

如何快速获得任何音频文件的准确持续时间?

来自分类Dev

使用不同的起点条目快速混合两个音频文件

来自分类Dev

JAVA - 遍历音频文件文件夹,将另一个音频文件连接到每个文件

来自分类Dev

Sox:连接多个音频文件之间没有间隙

来自分类Dev

在Swift中连接两个音频文件并播放它们