Я пытался использовать microhpone с AudioKit.
Код компилируется и запускается, он также запрашивает разрешение на доступ к микрофону, но все значения частоты и амплитуды равны 0.
Вот класс, который я написал для отправки показаний микрофонов как событий.
Я видел другие вопросы, которые могли быть относящимися к делу, и пробовал их все так же, как пытался изменить ввод, но не повезло.
Мне кажется, я либо неправильно понимаю жизненный цикл AudioKit, либо теги @ obj c меняют поведение.
Этот код раньше работал на старых ios версиях, но на 13.3 выглядит так есть изменения. (причина @ obj c в том, что мне нужно использовать это с реагировать на собственный мост)
Я думал, что это может быть связано с info.plist, но я настроил info.plist для конфиденциальности микрофона со строкой но все же не повезло.
Я что-то упустил?
Спасибо, пожалуйста, проверьте код здесь:
import Foundation
import AudioKit
@objc(AudioKitWrapper)
class AudioKitWrapper: NSObject {
@objc var mic: AKMicrophone!
@objc var timer: Timer!
@objc var tracker: AKFrequencyTracker!
override init(){
super.init()
do {
try AKSettings.setSession(category: .playAndRecord)
} catch {
AKLog("Could not set session category.")
}
AKSettings.defaultToSpeaker = true
if let inputs = AudioKit.inputDevices {
do {
print(inputs)
try AudioKit.setInputDevice(inputs[0])
AKSettings.audioInputEnabled = true
mic = AKMicrophone()
try mic?.setDevice(inputs[0])
}
catch {
print("microphone not supported")
}
}
try? AudioKit.start()
mic?.stop()
self.tracker = AKFrequencyTracker.init(mic, hopSize: 4_096, peakCount: 20)
timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(self.loop), userInfo: nil, repeats: true)
}
@objc func start() {
if (mic?.isStarted == true) {
print("stop")
mic?.stop()
try! AudioKit.stop()
}
else {
print("start")
mic?.start()
// try! AudioKit.start()
var silence = AKBooster(tracker, gain: 0)
AudioKit.output = silence
}
}
@objc static func requiresMainQueueSetup() -> Bool {
return false
}
@objc func loop() {
if (mic?.isStarted == true){
print(self.tracker.amplitude, self.tracker.frequency)
EventEmitter.sharedInstance.dispatch(name: "onChange",
body: ["amplitude": tracker.amplitude, "frequency":tracker.frequency])
}
}
}