音频套件 iOS 检测短麦克风输入(如点击)的音高/频率



>我正在尝试创建一个应用程序,用户可以在其中录制一个小音频剪辑 - 或来自麦克风的实时音频并发出短暂的噪音,例如点击。然后,该应用程序会分析其频率或音高,以便以后记住它。

我遇到了一个名为 Audio kit 的很棒的框架,这似乎有一个非常好的示例应用程序,至少可以让我入门。 http://audiokit.io/examples/MicrophoneAnalysis/

但是,如果运行它不能为我提供短时间音频的可用结果,例如点击桌面与拍手。

我很欣赏这个例子更多地用于人声或音乐音高检测 -

func setupPlot() {
let plot = AKNodeOutputPlot(mic, frame: audioInputPlot.bounds)
plot.plotType = .rolling
plot.shouldFill = true
plot.shouldMirror = true
plot.color = UIColor.blue
audioInputPlot.addSubview(plot)
}
override func viewDidLoad() {
super.viewDidLoad()
AKSettings.audioInputEnabled = true
mic = AKMicrophone()
tracker = AKFrequencyTracker(mic)
silence = AKBooster(tracker, gain: 0)
}
@objc func updateUI() {
if tracker.amplitude > 0.1 {
frequencyLabel.text = String(format: "%0.1f", tracker.frequency)
var frequency = Float(tracker.frequency)
while frequency > Float(noteFrequencies[noteFrequencies.count - 1]) {
frequency /= 2.0
}
while frequency < Float(noteFrequencies[0]) {
frequency *= 2.0
}
var minDistance: Float = 10_000.0
var index = 0
for i in 0..<noteFrequencies.count {
let distance = fabsf(Float(noteFrequencies[i]) - frequency)
if distance < minDistance {
index = i
minDistance = distance
}
}
let octave = Int(log2f(Float(tracker.frequency) / frequency))
noteNameWithSharpsLabel.text = "(noteNamesWithSharps[index])(octave)"
noteNameWithFlatsLabel.text = "(noteNamesWithFlats[index])(octave)"
}
amplitudeLabel.text = String(format: "%0.2f", tracker.amplitude)
}

我检查了音频套件网站,建议在此处发布带有适当标签的问题

所以我的问题是 - 是否可以使用框架做到这一点 - 理想情况下可靠地检测一小段音频的频率,以区分两次响亮的敲击(例如,有人拍打他们的胸部,然后拍他们的大腿(

或者有没有我应该考虑的替代框架(我是 iOS 开发人员(

首先要做的是确定两种类型的水龙头的声音之间是否存在统计上的显著差异。

您可以记录每个样本的一组样本,然后使用音频分析工具(例如使用 Audacity 或 MatLab 的频谱图(检查它们。 然后,如果可能的话,您可以查找一些特定的框架,以便可靠地检测您发现的任何差异。 或者,如果您可以收集数千个标记的声音样本,则可以将它们提供给一些深度学习工具,并将结果与iOS MLKit一起使用以进行推理。

最新更新