【问题标题】:AUDIOKIT - Why is the AKOscillatorBank RELASE, DECAY, SUSTAIN, and ATTACK being updated long after I change their values?AUDIOKIT - 为什么 AKOscillatorBank RELASE、DECAY、SUSTAIN 和 ATTACK 在我更改它们的值后很久才更新?
【发布时间】: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


【解决方案1】:

通过将振荡器BANK.rampDURATION 属性更改为0 而不是1,我可以立即获得结果。然而,即使释放设置为 1,4 或 5 秒后仍然可以听到音符......所以......

【讨论】:

    猜你喜欢
    • 2017-12-10
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 2021-12-16
    • 2014-05-08
    • 2016-03-10
    • 1970-01-01
    • 2021-03-21
    相关资源
    最近更新 更多