如何解决AudioKit:当我在某些循环后提高速度时,AKSamplerMetronome将不同步仅在48k hz设备中发生
每当在节拍器开始播放不均匀的某些循环后更新速度时,我都会在AKSamplerMetronome上工作,它仅在采样率为48000 Hz的设备上发生。在模拟器上可以正常工作。
let url1 = Bundle.main.url(forResource: "histicks",withExtension: "wav")
let url2 = Bundle.main.url(forResource: "losticks",withExtension: "wav")
metro = Metronome(sound: url1,downBeatSound: url2)
mixer = AKMixer()
metro?.delegate = self
metro! >>> mixer!
AudioKit.output = mixer
metro?.tempo = 60
do {
try AudioKit.start()
print("AUUDIOKKIT starting audiokit")
} catch {
AKLog("AudioKit did not start!")
}
下面是返回小节值的函数,循环后,我会更新速度。
func returnHitPosition(_ bars: Int32) {
DispatchQueue.main.async {
if !self.swSpeed.isOn {
return
}
self.hitCounts += 1;
// print("\(self.hitCounts) hits")
self.lblHits.text = "Hits: \(self.hitCounts)"
if self.hitCounts%4 == 0 {
self.barsCount += 1;
// print("\(self.barsCount) bars")
self.lblBars.text = "Bars: \(self.barsCount)"
let speedBars = (self.txtbars.text! as NSString).intValue
let d = (self.txtBpm.text! as NSString).doubleValue
if self.barsCount % speedBars == 0 && d <= 400 && self.barsCount > 0{
let now = AVAudioTime(hostTime: mach_absolute_time())
let speed = (self.txtSpeedBpm.text! as NSString).intValue
self.metro?.setTempo(d + Double(speed),at: now)
self.txtBpm.text = "\(Int32(d) + speed)"
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。