AudioKit - 记录默认输入(麦克风)而不将其发送到输出

时间:2017-11-18 22:21:49

标签: ios swift audio-recording audiokit

这可能是一个非常愚蠢的问题,因为我对AudioKit和IOS音频一般都是新手。我想要实现的是从我的麦克风录制剪辑(或只是一个简单的记录到文件)。

我不希望我的应用程序将输入(从麦克风)直接发送到输出,我的意思是我想在录制或使用我的应用程序时将麦克风静音(主要是因为我在调试时收到反馈,我想取消静音当用户使用耳机时。)

尝试在我的AKSettings.audioInputEnabled函数中使用AKSettings.defaultToSpeakerAppDelegate.swift -> application(这是正确的地方吗?)但是无法让它按照我的意愿运行。尝试通过增强器连接麦克风并将增益设置为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")
    }
}

1 个答案:

答案 0 :(得分:1)

我认为您需要在您正在录制的节点之后放置助推器。你想记录常规水平,然后通过增益设置为零的增强器发送它。