0

我正在尝试创建一个类似于 Reactable 的应用程序。

用户将能够将诸如振荡器或过滤器之类的“模块”从菜单拖到“播放区域”中,并且该模块将被激活。

我正在考虑初始化模块,因为它们与“游戏区”背景对象相交。但是,这需要我自动命名模块,即:

let osci = AKOscillator()

其中 osci 将自动计数为:

let osci1 = AKOscillator()
let osci2 = AKOscillator()
...

等等

我将如何做到这一点?

谢谢

编辑:我试图通过创建一个数组来使用一个数组

var osciArray = [AKOscillator]()

在我添加振荡器的函数中,这是我的代码:

    let oscis = AKOscillator()
    osciArray.append(oscis)
    osciArray[oscCounter].frequency = freqValue
    osciArray[oscCounter].amplitude = 0.5
    osciArray[oscCounter].start()
    selectedNode.userData = ["counter": oscCounter]
    oscCounter += 1
    currentOutput = osciArray[oscCounter]
    AudioKit.output = currentOutput
    AudioKit.start()

我的应用程序构建良好,但是一旦应用程序开始在模拟器上运行,我就会收到错误:致命错误:索引超出范围

4

2 回答 2

0

我没有使用过 AudioKit,但我不久前读到过它,我对它非常感兴趣。根据我从文档中了解到的情况,它的结构非常类似于 SpriteKit:节点连接在一起。

我想库中的大多数类都派生自基类,就像 SpriteKit 中的所有内容都派生自 SKNode 类一样。

既然您通过 SpriteKit 节点将音频工具包节点与视觉表示联系起来,为什么不简单地从 SKSpriteNode 子类化并使用 AudioKit 的基类添加可选的 audioNode 属性?

这样您就可以使用 SpriteKit 直接与存储的音频节点属性进行交互。

于 2017-04-13T18:31:12.937 回答
0

我认为您的问题中有很多与 AudioKit 相关的代码,但要回答这个问题,您只需查看 oscCounter。你没有显示它的初始值,但我猜它是零。然后将它加 1 并尝试访问只有一个元素的 osciArray[oscCounter],因此它应该由 osciArray[0] 访问。把柜台移低,你会过得更好。此外,您的振荡器看起来像局部变量,因此一旦丢失范围,它们就会丢失。它们应该在你的类或任何它的一部分中声明为实例变量。

于 2017-10-13T23:45:05.053 回答