AudioKit - 记录默认输入(麦克风)而不将其发送到输出
AudioKit - record the default input (microphone) without sending it to output
这可能是一个非常愚蠢的问题,因为我对 AudioKit 和一般的 IOS 音频真的很陌生。我想要实现的是从我的麦克风录制一个剪辑(或只是一个简单的文件记录)。
我不希望我的应用程序将输入(从麦克风)直接发送到输出,我的意思是我希望在录音或使用我的应用程序时将麦克风静音(主要是因为我在调试时得到反馈,我想例如,当用户戴着耳机时取消静音。
尝试在我的 AppDelegate.swift -> application
函数中使用 AKSettings.audioInputEnabled
和 AKSettings.defaultToSpeaker
(这是正确的地方吗?)但无法按我的意愿运行。还尝试通过增强器连接麦克风并将增益设置为 0,但随后它记录了空文件。
也许我使用的术语不正确,所以如果你纠正我,我会很高兴。
这是我的一段代码
AppDelegate.swift
AKSettings.defaultToSpeaker = true
AKSettings.audioInputEnabled = false
try! AKSettings.setSession(category: .playAndRecord)
录制代码(使用clipRecorder但我猜这道题也适用于普通录音机):
var mixer: AKMixer?
let length = 4.0
let microphone = AKMicrophone()
/* ... */
let booster = AKBooster(microphone)
booster.gain = 0
self.mixer = AKMixer(booster)
AudioKit.output = self.mixer
AudioKit.start()
/* ... */
self.clipRecorder = AKClipRecorder(node: mixer)
try clipRecorder.recordClip(time: clipRecorder.currentTime, duration: length, tap: nil, completion: { url, something, err in
/* ... */
} catch {
print("error")
}
非常感谢 AudioKit 伙计们,如果不麻烦的话,我也希望能更多地解释我做错了什么以及为什么做错了。
编辑: 按照 Aurelius 的要求提供当前代码,问题是如果我将增益设置为 0,我确实听不到麦克风反馈,但所有记录都是完整的沉默。
AppDelegate.swift
AKSettings.defaultToSpeaker = true
AKSettings.audioInputEnabled = true
try! AKSettings.setSession(category: .playAndRecord)
ViewController.swift
override func viewDidLoad() {
super.viewDidLoad()
silence = AKBooster(mic, gain: 0)
//mixer = AKMixer(silence)
AudioKit.output = silence
AudioKit.start()
clipRecorder = AKClipRecorder(node: silence!)
clipRecorder?.play()
}
@IBAction func recordButtonPressed(_ sender: Any) {
print("perssed")
do {
try clipRecorder?.recordClip(time: (clipRecorder?.currentTime)!, duration: 3.0, tap: nil, completion: {url,_,_ in
print("done")
})
} catch {
print("error")
}
}
编辑 2: 好的,经过几个小时的与自己的斗争,我弄清楚了哪里出了问题,事实上 Aurelius 是对的,这只是事物的顺序。录音机当然需要在静音前配备增强器(增益=0),录音机获得正确的值,在进入扬声器时静音。对于我在上面提供的示例,修复非常简单 -
ViewController.swift
override func viewDidLoad() {
super.viewDidLoad()
silence = AKBooster(mic)
clipRecorder = AKClipRecorder(node: silence!)
silence.gain = 0
AudioKit.output = silence
AudioKit.start()
clipRecorder?.play()
}
@IBAction func recordButtonPressed(_ sender: Any) {
print("perssed")
do {
try clipRecorder?.recordClip(time: (clipRecorder?.currentTime)!, duration: 3.0, tap: nil, completion: {url,_,_ in
print("done")
})
} catch {
print("error")
}
}
我想你需要把助推器放在你正在录制的节点之后。您想记录常规水平,然后通过增益设置为零的助推器发送它。
这可能是一个非常愚蠢的问题,因为我对 AudioKit 和一般的 IOS 音频真的很陌生。我想要实现的是从我的麦克风录制一个剪辑(或只是一个简单的文件记录)。
我不希望我的应用程序将输入(从麦克风)直接发送到输出,我的意思是我希望在录音或使用我的应用程序时将麦克风静音(主要是因为我在调试时得到反馈,我想例如,当用户戴着耳机时取消静音。
尝试在我的 AppDelegate.swift -> application
函数中使用 AKSettings.audioInputEnabled
和 AKSettings.defaultToSpeaker
(这是正确的地方吗?)但无法按我的意愿运行。还尝试通过增强器连接麦克风并将增益设置为 0,但随后它记录了空文件。
也许我使用的术语不正确,所以如果你纠正我,我会很高兴。
这是我的一段代码
AppDelegate.swift
AKSettings.defaultToSpeaker = true
AKSettings.audioInputEnabled = false
try! AKSettings.setSession(category: .playAndRecord)
录制代码(使用clipRecorder但我猜这道题也适用于普通录音机):
var mixer: AKMixer?
let length = 4.0
let microphone = AKMicrophone()
/* ... */
let booster = AKBooster(microphone)
booster.gain = 0
self.mixer = AKMixer(booster)
AudioKit.output = self.mixer
AudioKit.start()
/* ... */
self.clipRecorder = AKClipRecorder(node: mixer)
try clipRecorder.recordClip(time: clipRecorder.currentTime, duration: length, tap: nil, completion: { url, something, err in
/* ... */
} catch {
print("error")
}
非常感谢 AudioKit 伙计们,如果不麻烦的话,我也希望能更多地解释我做错了什么以及为什么做错了。
编辑: 按照 Aurelius 的要求提供当前代码,问题是如果我将增益设置为 0,我确实听不到麦克风反馈,但所有记录都是完整的沉默。
AppDelegate.swift
AKSettings.defaultToSpeaker = true
AKSettings.audioInputEnabled = true
try! AKSettings.setSession(category: .playAndRecord)
ViewController.swift
override func viewDidLoad() {
super.viewDidLoad()
silence = AKBooster(mic, gain: 0)
//mixer = AKMixer(silence)
AudioKit.output = silence
AudioKit.start()
clipRecorder = AKClipRecorder(node: silence!)
clipRecorder?.play()
}
@IBAction func recordButtonPressed(_ sender: Any) {
print("perssed")
do {
try clipRecorder?.recordClip(time: (clipRecorder?.currentTime)!, duration: 3.0, tap: nil, completion: {url,_,_ in
print("done")
})
} catch {
print("error")
}
}
编辑 2: 好的,经过几个小时的与自己的斗争,我弄清楚了哪里出了问题,事实上 Aurelius 是对的,这只是事物的顺序。录音机当然需要在静音前配备增强器(增益=0),录音机获得正确的值,在进入扬声器时静音。对于我在上面提供的示例,修复非常简单 - ViewController.swift
override func viewDidLoad() {
super.viewDidLoad()
silence = AKBooster(mic)
clipRecorder = AKClipRecorder(node: silence!)
silence.gain = 0
AudioKit.output = silence
AudioKit.start()
clipRecorder?.play()
}
@IBAction func recordButtonPressed(_ sender: Any) {
print("perssed")
do {
try clipRecorder?.recordClip(time: (clipRecorder?.currentTime)!, duration: 3.0, tap: nil, completion: {url,_,_ in
print("done")
})
} catch {
print("error")
}
}
我想你需要把助推器放在你正在录制的节点之后。您想记录常规水平,然后通过增益设置为零的助推器发送它。