当 运行 AUv3 的某些实例时,Audiokit 中的 AUv3 中的计时器发生冲突
Timers conflicst in AUv3 in Audiokit when running some instances of the AUv3
我正在使用 Audiokit 中的 AUv3。
Auv3 有一个执行操作的计时器。计时器在 viewDidLoad 上激活。
我尝试使用 Timer、usleep、DispatchQueue.asyncAfter 和 DispatchSourceTimer。他们都工作正常。问题是当 运行 启用 AUv3 的某些实例时,计时器会根据 AUv3 实例的数量重复触发时间或无法正常工作。
cpu 充电没有问题。
有什么办法可以同时在 Auv3 的某些实例中 运行 一个计时器,而它们之间不会发生冲突吗?
我的一些计时器:
func queue1() {
let currentDateTime = Date()
DispatchQueue.init(label: String(currentDateTime.timeIntervalSinceReferenceDate)).asyncAfter(deadline: .now() + .milliseconds(Int(1000 / self.slidervalue))) {
if self.closeQueue == 0 {
self.queue1()
self.makeTimer()
}
}
}
func usleep1(){
Darwin.usleep(10000)
usleep1()
makeTimer()
}
func timer1(){
timer = Timer.scheduledTimer(timeInterval: Double(timeInterval), target: self, selector: #selector(self.makeTimer), userInfo: nil, repeats: true)
}
我已经尝试使用主队列、全局队列和用户队列。我不知道为什么 AUv3 计时器会影响其他实例。任何的想法?。
最后我使用了 AKSequencer 和 AKMetronme 但问题是一样的。
谢谢
问题可能不在于 Timer
-- 您可能(因为此处未显示)依赖于代码中的某种单例。
AUv3 实例需要具有真正独特的依赖实例才能独立运行。
我正在使用 Audiokit 中的 AUv3。 Auv3 有一个执行操作的计时器。计时器在 viewDidLoad 上激活。 我尝试使用 Timer、usleep、DispatchQueue.asyncAfter 和 DispatchSourceTimer。他们都工作正常。问题是当 运行 启用 AUv3 的某些实例时,计时器会根据 AUv3 实例的数量重复触发时间或无法正常工作。 cpu 充电没有问题。 有什么办法可以同时在 Auv3 的某些实例中 运行 一个计时器,而它们之间不会发生冲突吗? 我的一些计时器:
func queue1() {
let currentDateTime = Date()
DispatchQueue.init(label: String(currentDateTime.timeIntervalSinceReferenceDate)).asyncAfter(deadline: .now() + .milliseconds(Int(1000 / self.slidervalue))) {
if self.closeQueue == 0 {
self.queue1()
self.makeTimer()
}
}
}
func usleep1(){
Darwin.usleep(10000)
usleep1()
makeTimer()
}
func timer1(){
timer = Timer.scheduledTimer(timeInterval: Double(timeInterval), target: self, selector: #selector(self.makeTimer), userInfo: nil, repeats: true)
}
我已经尝试使用主队列、全局队列和用户队列。我不知道为什么 AUv3 计时器会影响其他实例。任何的想法?。 最后我使用了 AKSequencer 和 AKMetronme 但问题是一样的。 谢谢
问题可能不在于 Timer
-- 您可能(因为此处未显示)依赖于代码中的某种单例。
AUv3 实例需要具有真正独特的依赖实例才能独立运行。