2017-04-13 5 views
0

Reactable과 비슷한 응용 프로그램을 만들려고합니다.AudioKit (SpriteKit)에서 객체의 동적 이름 지정

사용자는 오실레이터 나 필터와 같은 "모듈"을 메뉴에서 "재생 영역"으로 드래그하여 모듈을 활성화 할 수 있습니다.

"놀이 영역"배경 개체와 교차 할 때 모듈을 초기화 할 생각입니다. 그러나이 자동으로 모듈의 이름을 나를 필요, 즉 :

는 OSCI가 자동으로 계산됩니다
let osci = AKOscillator() 

가되게합니다 :

let osci1 = AKOscillator() 
let osci2 = 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() 
: 내가 오실레이터를 추가
var osciArray = [AKOscillator]() 

내 기능에

의 배열을 만들어 배열을 사용하려고이 내 코드입니다

내 응용 프로그램이 잘 빌드되지만 일단 응용 프로그램이 시뮬레이터에서 실행되면 오류가 발생합니다. 치명적인 오류 : 색인 범위를 벗어남

+0

배열 또는 컬렉션이 작동하지 않습니까? – Valdmer

+0

이 [스레드] (http://stackoverflow.com/questions/27716931/create-a-variable-in-swift-with-dynamic-name)을 기반으로 배열을 시도하고 있습니다. 그러나 배열과 함께 AKOscillator 함수의 매개 변수를 변경하는 데 문제가 있습니다 (예 : osci.frequency = 440) –

+0

어떤 유형의 문제입니까? 몇 가지 코드를 추가하고, 오류가 발생하고 배열이 왜 작동하지 않는지 설명하여 질문을 업데이트 하시겠습니까? – Valdmer

답변

0

AudioKit을 사용하지는 않았지만 잠시 전에 그것에 대해 읽었습니다. 문서에서 이해할 수 있듯이 SpriteKit과 같이 구조화 된 노드입니다.

SpriteKit의 모든 것이 SKNode 클래스에서 파생 된 것과 마찬가지로 라이브러리의 대부분의 클래스는 기본 클래스에서 파생 된 것 같습니다.

SpriteKit 노드를 통해 오디오 키트 노드를 시각적 표현으로 연결하기 때문에 SKSpriteNode에서 하위 클래스로 만들고 AudioKit의 기본 클래스와 함께 선택적 audioNode 속성을 추가하지 않는 이유는 무엇입니까?

그런 식으로 SpriteKit을 사용하여 저장된 오디오 노드 속성과 직접 상호 작용할 수 있습니다.

+0

내가 AudioKit 노드를 기반으로하는 SKSpriteNode의 하위 클래스를 만들 것을 제안 하시겠습니까? 나는. 'class SKSpriteNode : AKOscillator {}'또는 비슷한 것? 나는 일반적으로 신속하고 프로그래밍에 익숙하지 않아서 아직도 혼란 스럽다. 원본 클래스에서 SKSpriteNode 속성에 액세스하려면 어떻게해야합니까? –

0

질문에 AudioKit 관련 코드가 많이있는 것 같지만 질문에 대답하려면 oscCounter 만 살펴 봐야합니다. 당신은 초기 값을 보여주지 않지만, 그것이 0이라고 추측합니다. 그런 다음 1 씩 증가시키고 osciArray [oscCounter]에 액세스하려고 시도합니다.이 요소에는 하나의 요소 만 있으므로 osciArray [0]에 의해 액세스되어야합니다. 카운터를 낮추면 더 나아질 것입니다. 또한 오실레이터는 로컬 변수처럼 보이므로 범위를 잃어 버리면 손실됩니다. 클래스의 인스턴스 변수 또는 이것의 일부분으로 선언되어야합니다.