我一直在使用 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))
添加到输出中。当我这样做时,我希望听到可怕的反馈尖叫声,但我什么也没得到。不过,采样器中的音符回放仍然有效。AVCaptureDevice.authorizationStatusForMediaType: .audio
。这会显示一个权限对话框,当我同意麦克风访问时,我会回来.authorized
。
所有事物的烹饪书应用程序,其中的调音器在 MacOS 和 iOS 上都运行良好,这是非常令人鼓舞的!
我的猜测是我没有在MacOS上正确配置麦克风输入,或者可能没有获得必要的权限,所以engine.input
只是一阵沉默?我想知道是否有一个
极简晚餐“你好,世界!”演示应用程序的级别显示了如何配置麦克风以在 MacOS 上使用?
麦克风输入的关键点,或者只是代码,将是这个问题的一个很好的答案。我还想让它在
PitchTap
回调未触发的 iOS 上运行。一旦我解决了这个问题,我将在另一个问题中讨论这个问题。非常感谢!
它似乎比 AudioKit 库更通用,并且可能会影响所有(最近的)Apple 硬件上麦克风的任何使用。
您需要为您的项目目标提供必要的“功能”来访问音频输入。
如果您不这样做,仍然可以访问音频输入,但输入设备只会提供静音。似乎没有任何日志消息、编译警告或抛出的错误。
获取音频输入功能...
应用程序 Snadbox UI