最小的 AudioKit 麦克风配置(MacOS + iOS)

问题描述 投票:0回答:1

我一直在使用 AudioKit 为 MacOS(以及 iOS)构建一个应用程序。

该应用程序将用

MIDISampler
播放声音,这一点有效!

它还将使用设备麦克风进行监听,并使用

PitchTap
提供调音信息。我无法让它发挥作用。

我的音频图设置看起来像这样......

final class AudioGraph {
    let engine = AudioEngine()
    let sampler = MIDISampler(name: "sampler")
    let pitchTracker: PitchTap

    init(file: SamplerFile? = nil) throws {
        let mic = engine.input!

        engine.output = Mixer(
            sampler, 
            Fader(mic, gain: 0.0)
        )

        pitchTracker = PitchTap(mic) { f, a in
            guard let f = f.first, let a = a.first else { return }
            print("Frequency \(f) – Amplitude \(a)")
        }

        if let file {
            try setFile(file)
        }
    }

    func setFile(_ file: SamplerFile) throws {
        try sampler.loadInstrument(url: file.url)
    }
}

// MARK: -

extension AudioGraph: NotePlayer {
    func startAudioEngine() throws {
        print("### Start engine")
        try engine.start()
        pitchTracker.start()
    }

    func stopAudioEngine() {
        pitchTracker.stop()
        engine.stop()
    }
}

当我在 MacOS 上运行这个批次时,我可以演奏音符(是的)。然而,调用

PitchTap
回调时会提供频率和幅度信息,但音调始终为
100.0
,幅度始终为
2.4266092e-05
(就像 – 几乎为零)。

我做了一些实验......

  • 我已经确认麦克风确实可以工作 - 它在其他应用程序中工作正常,并且在食谱应用程序中调谐器工作正常。
  • 我已将
    PitchTap
    附加到
    MIDISampler
    ,而不是使用
    pitchTracker = PitchTap(sampler) { … }
    ,这有效。当我演奏音符时,它们的频率会显示在控制台上👍.
  • 我尝试通过将
    engine.input
    gain
    设置为
    Mixer
    1.0
    ,将
    engine.output = Mixer(sampler, Fader(mic, gain: 1.0))
    添加到输出中。当我这样做时,我希望听到可怕的反馈尖叫声,但我什么也没得到。不过,采样器中的音符回放仍然有效。
  • 我已按照 Apple 的指示检查了
    AVCaptureDevice.authorizationStatusForMediaType: .audio
    。这会显示一个权限对话框,当我同意麦克风访问时,我会回来.authorized
我已经构建并运行了

所有事物的烹饪书应用程序,其中的调音器在 MacOS 和 iOS 上都运行良好,这是非常令人鼓舞的!

我的猜测是我没有在MacOS上正确配置麦克风输入,或者可能没有获得必要的权限,所以

engine.input

只是一阵沉默?

我想知道是否有一个

极简晚餐“你好,世界!”演示应用程序的级别显示了如何配置麦克风以在 MacOS 上使用?

麦克风输入的关键点,或者只是代码,将是这个问题的一个很好的答案。

我还想让它在

PitchTap

 回调未触发的 iOS 上运行。一旦我解决了这个问题,我将在另一个问题中讨论这个问题。

非常感谢!


回答

这个问题已经被关闭了,所以我无法在这里回答。美妙的结果。

答案就在这里。您需要在 Xcode 的设置中添加对强化运行时的音频输入资源访问权限。

macos audiokit
1个回答
0
投票
这个问题的答案变得非常简单,因为它完全不明显。

它似乎比 AudioKit 库更通用,并且可能会影响所有(最近的)Apple 硬件上麦克风的任何使用。

您需要为您的项目目标提供必要的“功能”来访问音频输入。

如果您不这样做,仍然可以访问音频输入,但输入设备只会提供静音。似乎没有任何日志消息、编译警告或抛出的错误。

获取音频输入功能...

我发现了两个可以在 Xcode 项目中启用的“功能”。我不确定两者是否有必要。也许其中一个由催化剂目标使用,另一个由非催化剂目标使用。我还没有调查过这一点 – 我建议只检查两者。

    打开您的 Xcode 项目。
  • 转到项目的设置(通常是左侧导航栏中最顶部的项目)。
  • 从设置左侧的“目标”中选择您的目标。
  • 选择设置页面顶部的“签名和功能”选项卡。
  • 向下滚动并找到“应用程序沙箱”部分。
    • 找到“硬件”小节
    • 找到“音频输入”复选框并选择它。
  • 向下滚动并找到“强化运行时”部分。
    • 找到“资源访问”小节。
    • 找到“音频输入”复选框并选择它。
这些部分是这样的......

应用程序 Snadbox UI

App Sandbox UI

强化的运行时用户界面

Hardened Runtime UI

© www.soinside.com 2019 - 2024. All rights reserved.