我是 Audiokit 的新手,我正在尝试对来自麦克风的输入音频进行一些实时数字信号处理。
我知道我想要的数据在AKAudioFile的FloatChannelData中,但是如果我想实时获取这个数据怎么办?我目前正在使用 AKMicrophone、AKFrequencyTracker、AKNodeOutputPlot、AKBooster,并且正在绘制跟踪器的幅度数据。但是,该数据与音频信号不同(如您所知,它是 RMS)。有什么方法可以从麦克风获取信号的浮动数据吗?或者甚至来自 AKNodeOutputPlot?我只需要读取权限。
AKSettings.audioInputEnabled = true
mic = AKMicrophone()
plot = AKNodeOutputPlot(mic, frame: audioInputPlot.bounds)
tracker = AKFrequencyTracker.init(mic)
silence = AKBooster(tracker,gain:0)
AudioKit.output = silence
AudioKit.start()
推荐的创建者here https://groups.google.com/forum/#!topic/audiokit/UY41kLzO4D8:
AKNodeOutputPlot 可以工作,它是一个短文件。您基本上只需点击节点并获取数据即可。
如果我有一个绘图 (AKNodeOutputPlot)、麦克风 (AKMicrophone) 实例并且想要将这些值输出到标签,这将如何在我的 viewController 中工作?
点击您想要从中获取数据的节点。我在上面的引用中使用了 AKNodeOutputPlot,因为它相当简单,只需使用该数据作为绘图的输入,但您可以获取数据并对其执行任何操作。在此代码中(来自AK节点输出图 https://github.com/AudioKit/AudioKit/blob/master/AudioKit/Common/User%20Interface/AKNodeOutputPlot.swift):
internal func setupNode(_ input: AKNode?) {
if !isConnected {
input?.avAudioNode.installTap(
onBus: 0,
bufferSize: bufferSize,
format: nil) { [weak self] (buffer, _) in
guard let strongSelf = self else {
AKLog("Unable to create strong reference to self")
return
}
buffer.frameLength = strongSelf.bufferSize
let offset = Int(buffer.frameCapacity - buffer.frameLength)
if let tail = buffer.floatChannelData?[0] {
strongSelf.updateBuffer(&tail[offset], withBufferSize: strongSelf.bufferSize)
}
}
}
isConnected = true
}
您可以实时获取缓冲区数据。在这里,我们只是将其发送到“updateBuffer”,在那里它被绘制,但您不需要绘制,而是做其他事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)