首页 > 解决方案 > AudioKit 如何处理或重用 AKNodeRecorder

问题描述

在我的应用程序中,我为用户提供了创建多个具有不同名称的录音的选项。

我使用以下内容进行记录:

let tape = try AKAudioFile.init(forWriting: URL.init(fileURLWithPath: path), settings: [AVFormatIDKey: kAudioFormatMPEG4AAC, AVSampleRateKey: 44100, AVNumberOfChannelsKey: 2, AVEncoderBitRateKey: 192000, AVEncoderAudioQualityKey:AVAudioQuality.high.rawValue])
let recorder = try AKNodeRecorder(node: masterMixer, file: tape)

try recorder.record()

// Some time later
recorder.stop()

一切正常,我得到了录制的音频,我可以播放它并听音乐,但这是我的要求。这适用于一次录音。现在我需要录制另一个录音。

我该怎么做?我是否要创建另一个 AKNodeRecorder 并再次像这样绑定它?如果是这种情况不会一直绑定它会导致内存泄漏吗?

标签: iosaudiokit

解决方案


使用 AKNodeRecorder 录制音频文件后,您可以重复使用它。在再次录制之前将其重置:

func startRecordingAudio() {
    do {
        try self.recorder?.reset()
        try recorder?.record()
    } catch {
        print("Error starting audio recording")
    }
}

这会将录音保存到同一文件中。因此,要保留每个记录,您应该在完成每个记录后将记录的文件移动到最终目的地。

func stopRecording() {
    recorder?.stop()
    if let recordedURL = recorder?.audioFile?.url {
        let uuid = NSUUID().uuidString
        let destinationPath = NSTemporaryDirectory() + "/" + uuid + ".caf"
        let destinationURL = URL(fileURLWithPath: filePath)
        let fileManager = FileManager.default
        do {
            try fileManager.moveItem(at: recordedURL, to: destinationURL)
        } catch {
            print("Could not copy file")
        }
    }
}

推荐阅读