Я пытаюсь создать приложение, в котором пользователь может записать небольшой аудиоклип - или звук в реальном времени с микрофона и издавать короткий шум, например, постукивание.Затем приложение анализирует частоту или высоту звука, чтобы запомнить это позже.
Я натолкнулся на удивительный фреймворк под названием 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)