【发布时间】:2020-04-08 15:11:53
【问题描述】:
我一直在尝试将 microhpone 与 AudioKit 一起使用。
代码编译并运行,还请求访问麦克风的权限,但所有频率和幅度读数均为 0。
这是我编写的用于将麦克风读数作为事件发送的类。
我看到了其他可能相关的问题并尝试了所有问题,就像我尝试更改输入但没有运气一样。
我的猜测是要么我没有正确理解 AudioKit 生命周期,要么@objc 标签改变了行为。
这段代码曾经在旧的 ios 版本上工作,但在 13.3 上似乎有变化。 (@objc 的原因是我需要将它与 react native bridge 一起使用)
我认为这可能与 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])
}
}
}
【问题讨论】: