Ios 音频套件-录制默认输入(麦克风),而不将其发送到输出
这可能是一个非常愚蠢的问题,因为我对AudioKit和IOS音频都是新手。我试图实现的是从我的麦克风录制一个剪辑(或者只是一个简单的文件录制) 我不希望我的应用程序将输入(从麦克风)直接发送到输出,我的意思是,我希望在录制或使用我的应用程序时麦克风静音(主要是因为我在调试时收到反馈,例如,当用户使用耳机时,我希望取消静音) 尝试在我的Ios 音频套件-录制默认输入(麦克风),而不将其发送到输出,ios,swift,audio-recording,audiokit,Ios,Swift,Audio Recording,Audiokit,这可能是一个非常愚蠢的问题,因为我对AudioKit和IOS音频都是新手。我试图实现的是从我的麦克风录制一个剪辑(或者只是一个简单的文件录制) 我不希望我的应用程序将输入(从麦克风)直接发送到输出,我的意思是,我希望在录制或使用我的应用程序时麦克风静音(主要是因为我在调试时收到反馈,例如,当用户使用耳机时,我希望取消静音) 尝试在我的AppDelegate.swift->application函数中播放AKSettings.audioInputEnabled和AKSettings.default
AppDelegate.swift->application
函数中播放AKSettings.audioInputEnabled
和AKSettings.defaultToSpeaker
(这是正确的位置吗?)。还尝试通过扩音器连接麦克风并将增益设置为0,但随后录制了空文件
也许我没有使用正确的术语,所以如果你纠正我,我会很高兴
这是我的一段代码
AppDelegate.swift
AKSettings.defaultToSpeaker = true
AKSettings.audioInputEnabled = false
try! AKSettings.setSession(category: .playAndRecord)
AKSettings.defaultToSpeaker = true
AKSettings.audioInputEnabled = true
try! AKSettings.setSession(category: .playAndRecord)
记录代码(使用clipRecorder,但我猜这个问题也适用于常规记录器):
非常感谢音响工具包的朋友们,如果不麻烦的话,我也希望你们能解释一下我做错了什么,为什么做错了
编辑:按照Aurelius的要求提供当前代码,问题是如果我将增益设置为0,我确实听不到麦克风反馈,但所有记录都是完全静音
AppDelegate.swift
AKSettings.defaultToSpeaker = true
AKSettings.audioInputEnabled = false
try! AKSettings.setSession(category: .playAndRecord)
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")
}
}
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")
}
}
编辑2:好吧,经过几个小时的自我斗争,我发现了问题所在,奥雷利乌斯确实是对的,这只是事情的顺序。录音机当然需要在静音(增益=0)前配备助推器,录音机获得正确的数值,在进入扬声器时静音。对于我上面提供的示例,修复非常简单-
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")
}
}
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")
}
}
我想你需要把助推器放在你正在记录的节点之后。您希望录制常规音量,然后再通过增益设置为零的助推器发送。谢谢Aurelius,当应用程序运行时(不仅仅是录制时),我仍然能听到麦克风的反馈。尝试播放助推器的位置,但也必须更改
AudioKit.output=self.mixer,AudioKit.start()
,我感觉我做错了什么。如果助推器的增益为零,我看不出你怎么能听到任何声音。你能分享你的项目吗?再次感谢Aurelius,我会在我回家后提供代码,我现在看到了你写的这个教程,我想,如果我理解你上面的答案,这个教程/示例应该是我需要的吧?我可以看到它在这里使用了你说的助推器。嗨,奥雷利乌斯,提供的代码,仍然无法让它录制声音,也无法获得反馈。如果你能帮我,我将不胜感激,谢谢!好的,找出我做错了什么,为我的问题提供正确的代码(Edit2),非常感谢Aurelius。