ios - 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 并再次像这样绑定它?如果是这种情况不会一直绑定它会导致内存泄漏吗?
解决方案
使用 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")
}
}
}
推荐阅读
- python - 如何在没有缩进错误的情况下添加更多选项?
- c++ - C / C++ 更清晰的#includes
- java - Hibernate 1:1 双向映射失败 - 实体字段为空
- java - Maven / Java项目中目标文件夹旁边的“半持久”文件的备份文件夹?最佳实践?
- react-native - React Native 推送通知使应用程序崩溃
- python-3.x - 根据两个dfs上的日期列将一个df的列附加到另一个df - pandas
- flutter - 为什么 Dart Uri 用“+”替换空格?
- snakemake - Snakemake,RNA-seq:如何根据所分析样本的特征执行管道的一个子部分或另一个子部分?
- c++ - g++ 链接器是静态链接还是动态链接 libusb 和 pthreads?
- asp.net-core - asp.net 核心页脚中的页码(部分视图)