2017-12-16 6 views
2

AudioKitを使用してこのクラッシュを取得しています*** Terminating app due to uncaught exception 'com.apple.coreaudio.avfaudio', reason: 'player started when in a disconnected state'これは、ノードを作成して追加するときに発生しますが、別の順序で追加すると発生しません。ここで、所望の鎖である:AudioKitチェーンのノードの作成順序に関連する「切断状態」のクラッシュ

[プレーヤー] - > [booster1] - > [MIXER1] - > [booster2] - > [MIXER2] - > [ピークリミッタ] - > [出力]

Iこのために、それを構築する、それがクラッシュ:

let mixer2 = AKMixer() 

let peakLimiter = AKPeakLimiter(mixer2) 

AudioKit.output = peakLimiter 
AudioKit.start() 

let mixer1 = AKMixer() 

let booster2 = AKBooster(mixer1) 
mixer2.connect(input: booster2) 

let booster1 = AKBooster(player) 
mixer1.connect(input: booster1) 

player.play() 

しかし、私はこの順序でそれを構築する場合、それが動作します:

let booster1 = AKBooster(player) 

let mixer1 = AKMixer() 
mixer1.connect(input: booster1) 

let booster2 = AKBooster(mixer1) 

let mixer2 = AKMixer() 
mixer2.connect(input: booster2) 

let peakLimiter = AKPeakLimiter(mixer2) 

AudioKit.output = peakLimiter 
AudioKit.start() 

player.play() 

任意のアイデアなぜですか?アプリの動的な理由から、最初の例(クラッシュ)は必要な作成順序です。

また、最初の作成順序の例を使用して2番目のブースターを省略すると、それは機能します。 [プレーヤー] - > [booster1] - > [MIXER1] - > [MIXER2] - > [ピークリミッタ] - > [出力]

let mixer2 = AKMixer() 

let peakLimiter = AKPeakLimiter(mixer2) 

AudioKit.output = peakLimiter 
AudioKit.start() 

let mixer1 = AKMixer() 
mixer2.connect(input: mixer1) 

let booster1 = AKBooster(player) 
mixer1.connect(input: booster1) 

player.play() 

答えて

2

あなただけplay前に、outputstartを移動しようとするかもしれない(ただし、結局のところconnect):

AudioKit.output = peakLimiter 
AudioKit.start() 
player.play() 
+0

これはうまくいきました。ただし、実行時にユーザーが追加してmixer2に接続するチェーンの前半部分([player] - > [booster1] - > [mixer1] - > [booster2])が多数存在するため、ユーザーが追加を開始する前に、AudioKitの出力を設定し、アプリケーションの起動時にAudioKit()を起動します。 –

+0

あなたが役に立ったら嬉しいです。気をつけて投票し、答えを受け入れてください:) –

関連する問題