我想在 Swift 中使用 AudioKit 做一个简单的“记录用户的麦克风 -> 应用效果 -> 保存到 wav 文件”链。
下面是我尝试使用的代码。相反,我得到的是通过耳机听到输出(应用了音高效果),但输出文件是空的。我做错了什么?
import AudioKit
import AVFoundation
import SoundpipeAudioKit
class AudioRecorder: ObservableObject {
let engine = AudioEngine()
var recoder: NodeRecorder?
private(set) lazy var outputFileURL: URL = {
let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
return documentsPath.appendingPathComponent("recording.wav")
}()
func startRecording() {
do {
try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker])
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print("Failed to set up recording session.")
return
}
guard let input = engine.input else {
print("No audio input found")
return
}
do {
recorder = try NodeRecorder(node: input, fileDirectoryURL: outputFileURL)
} catch let err {
fatalError("\(err)")
}
let pitchShifter = PitchShifter(input)
engine.output = pitchShifter
do {
try engine.start()
} catch {
print("Unable to start audio engine: \(error.localizedDescription)")
return
}
}
func stopRecording() {
engine.stop()
do {
try AVAudioSession.sharedInstance().setActive(false)
} catch {
print("Failed to stop recording session.")
}
}
}
最佳答案
尝试更改以下内容以使其正常工作:
行
var recoder: NodeRecorder?
更改为var recorder: NodeRecorder?
//缺少 r行
return DocumentsPath.appendingPathComponent("recording.wav")
更改为return DocumentsPath
//NodeRecorder 想要一个目录,而不是 fileDirectoryURL 中的文件在添加录音机之前将
pitchShifter
添加到录音记录中,因为您想要录制移动的音频。通过两个不同的步骤录制并保存到 .waf。 NodeRecorder 记录到临时 .caf,然后您可以移动或编码并发送该文件。
NodeRecorder 有一些内置的文件管理功能,请注意
shouldCleanupRecordings:
因为它默认为 true
--
let pitchShifter = PitchShifter(input)
do {
recorder = try NodeRecorder(node: pitchShifter, fileDirectoryURL: outputFileURL, shouldCleanupRecordings:false)
} catch let err {
fatalError("\(err)")
}
engine.output = pitchShifter
进一步查看AudioKit的Cookbook,这个例子会有所帮助:https://github.com/AudioKit/Cookbook/blob/main/Cookbook/CookbookCommon/Sources/CookbookCommon/Recipes/MiniApps/Recorder.swift
关于Swift - 无法找出 AudioKit 中的简单 "Mic->Effect->File"链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77738166/