【发布时间】:2019-11-16 22:32:47
【问题描述】:
我正在开发一个简单的 AudioKit 应用程序。
我在运行时初始化了一个 AKOsicillatorBANK,并允许您按下一个按钮来访问一个新的 viewCONTROLLER,该 viewCONTROLLER 具有 SLIDERS,当更改该 SLIDERS 时会更改振荡器BANK 属性的值 [releaseDURATION、attackDURATION、decayDURATION、sustainLEVEL]。
在滑块的 PANGESTURE [状态 == 结束] 的末尾,我调用了一个函数,将振荡器BANKS 属性设置为它们的新值,这些新值存储在类变量中。
我不知道为什么,但更改仅在调用函数后一段时间(几分钟)生效。有谁知道这是为什么?
也请不要评论我的大写风格。我更喜欢这个,因为它可以让我强调我认为重要的事情,这可以帮助你更好地了解我的思路。
这里是代码。请注意,我只在 panGESTURE 中包含了 DECAY 的代码,因为攻击、释放和维持代码都是相同的设计:
// MAIN VIEW CONTROLLER CLASS, GLOBAL SCOPE, INITIALIZED WITH VIEW DID LOAD //
let bank = AKOscillatorBank()
var bankATTACK: Double = 0
var bankDECAY: Double = 0
var bankSUSTAIN: Double = 1
var bankRELEASE: Double = 0
func updateBANKWAVE() {
self.bank.rampDuration = 1
self.bank.attackDuration = self.bankATTACK
self.bank.decayDuration = self.bankDECAY
self.bank.sustainLevel = self.bankSUSTAIN
self.bank.releaseDuration = self.bankRELEASE
print("NEW BANK RAMP [\(self.bank.rampDuration)]")
print("NEW BANK ATTACK [\(self.bank.attackDuration)]")
print("NEW BANK DEC [\(self.bank.decayDuration)]")
print("NEW BANK SUS [\(self.bank.sustainLevel)]")
print("NEW BANK REL [\(self.bank.releaseDuration)]")
}
func prepareforSEGUE() {
if let sliderCONTROLLER = segue.destination as? SLIDERVIEWCONTROLLER {
sliderCONTROLLER.mainCONTROLLER = self
}
}
// SLIDER VIEW CONTROLLER CLASS //
if panGESTURE.state == changed {
// ... update a UILabel to reflect the value to be set ...
decayTEXT = String(format: "%.3f", (self.decayTRANSLATION.truncatingRemainder(dividingBy: 100.0)))
// ... update the MAIN controller variables ...
self.mainCONTROLLER.bankDECAY = Double(self.decayTRANSLATION.truncatingRemainder(dividingBy: 100.0))
// ... protect against values above 10 or below 0 ...
if decayTRANSLATION > 10 { decayVALUE.text = "10.000" ; decayTRANSLATION = 10.01 ; self.mainCONTROLLER.bankDECAY = 10 }
if decayTRANSLATION < 0 { decayVALUE.text = "0.000" ; decayTRANSLATION = -0.01 ; self.mainCONTROLLER.bankDECAY = 0 }
}
if panGESTURE.state == ended {
self.mainCONTROLLER.updateBANKWAVE()
}
【问题讨论】:
-
除非您提供一个能证明问题的 Github 项目,否则您不太可能获得帮助。事实上,要重现这一点,我需要创建一个新项目并尝试将这段代码硬塞进去,这不会发生。
-
@AureliusProchazka 我刚刚将项目上传到我的 GITHUB [github.com/escobea0] ... ... 可以在 OUVERREACT 和 INCOMPLETE VERSION 分支下找到它。 ... ... ... 就像我说的,当rampDURARTION 设置为0 时,问题似乎解决了。我不知道 RAMP DURATION 是做什么的。
-
@AureliusProchazka 如果你想看看我在说什么,你需要在主视图控制器类中名为 [updateBANKWAVE] 的函数中将 RAMP DURATION 设置为 1 而不是 0。
标签: audio-player audiokit bank