我正在尝试创建一个类似于Reactable的应用程序。
用户可以将像振荡器或滤波器这样的“模块”从菜单拖到“播放区域”中,该模块将被激活。
我正在考虑初始化模块,因为它们与"play area“背景对象相交。但是,这需要我自动命名模块,即:
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()我的应用程序构建得很好,但是一旦应用程序开始在模拟器上运行,我就会得到错误:致命错误:索引超出范围
发布于 2017-04-14 02:31:13
我还没有用过AudioKit,但我在一段时间前读到过它,我对它很感兴趣。根据我在文档中的理解,它的结构非常类似于SpriteKit:节点连接在一起。
我猜这个库中的大多数类都派生自一个基类,就像SpriteKit中的所有类都派生自SKNode类一样。
既然您通过SpriteKit节点将音频工具包节点与可视表示相链接,为什么不简单地从SKSpriteNode中将子类添加到AudioKit的基类中,并添加一个可选的audioNode属性呢?
这样,您就可以使用SpriteKit直接与存储的音频节点属性进行交互。
发布于 2017-10-14 07:45:05
我认为你的问题中有很多与AudioKit相关的代码,但要回答这个问题,你只需看看oscCounter。您没有显示它的初始值,但我猜它是零。然后将其递增1,并尝试访问只有一个元素的osciArrayoscCounter,因此osciArray应该可以访问它。把柜台移低一点,你会过得更好。此外,您的振荡器看起来像局部变量,因此一旦丢失作用域,它们就会丢失。它们应该在你的类中声明为实例变量,或者这是其中的一部分。
https://stackoverflow.com/questions/43397925
复制相似问题