2015-12-14 19 views
9

を行うAVAudioEngineAVAudioEngineConfigurationChangeNotificationまで有線開始:AVAudioEngine.startでのクラッシュは()私は(再)に以下のコードを持って/キャッチ

do { 
     try self.engine.start() 
    } catch { 
     DDLogError("could not start sound engine") 
     self.soundEnabled = false 
     return 
    } 

self.engineは

として定義されますcom.apple.coreaudio:
private let engine = AVAudioEngine() 

しかし、私は頻繁に

致命的な例外を言ってCrashlytics経由してクラッシュレポートを受け取ります。 avfaudioエラー561015905

try self.engine.start()を含む行にあります。

561015905はAVAudioSessionErrorCodeCannotStartPlayingであり、これはNSErrorのエラーコードでなければなりません。これは例外ではなく、上記のコードで空白のcatchにキャッチする必要があります。それでも、その時点でアプリがクラッシュするようです。私は何が欠けていますか?

私はdo/catchと思っていたので、このエラーが発生する可能性があるバックグラウンドでアプリが起動して、それが起こっても何とかしてキャッチすることができます。

+1

同様のエラーが発生します。なぜこれが起こったのか分かりましたか? – Pulsar

+1

いいえ、私はAppleとバグレポートを開いていますが、まだ回答を受け取っていません。その間、私は 'AVAudioEngine'の使用をやめました。 – Mike

+0

@Mikeこれに関する更新情報あなたは睡眠より良い仕事を見つけましたか?あなたはAppleから何か聞いたことがありますか?これは、iOS 11の外観では依然として問題です。 –

答えて

2

AVAudioSessionInterruption通知を処理するときに同じエラーが発生しました。
私の場合、割り込みが終了した後にAVAudioEngineを開始しようとするとエラーが発生しました。
しばらくの間、詳細なテストとデバッグが行われた後、debugger breakpointaudioEngine.prepare()またはaudioEngine.start()の前に導入すると、アプリケーションがクラッシュしないことに気付きました。
audioEngine.start()の前にsleep(1)を追加して、アプリがクラッシュするのをやめました。

私はそれが非常にエレガントな解決策ではないことを知っていますが、これは他の誰かを助けるかもしれないことを願っています!

1

Xcodeバージョン9.2(9C40b)+ Swift 4:この質問はちょっと古いですが、私はaudioEngine.start()と同じクラッシュ問題を抱えていましたが、これはCrashalytics :

致命的な例外:com.apple.coreaudio.avfaudioエラー561015905

S1LENT WARRIORの睡眠は、(1)いくつかのケースで働いていた "ハック"、すべてではない(特にAVAudioEngineConfigurationChangeNotificationセレクタ付き)。実装後、今

Catching NSException in Swift

:(!大感謝)

最後に、私はクラッシュが発生していないので、本当にフライタークによって、この非常に便利なポストから、エラーをキャッチするために取り扱うのObj-Cの例外を使用しましたObjCの.hと.mファイルのファイルやブリッジングヘッダ、私が行います

do { 
    try ObjC.catchException { 
     try! self.audioEngine.start() 
    } 
} 
catch { 
    print("An error occurred: \(error)") 
} 

あなたはエンジンの初期化(例えば.attachか何かを.connectしていない)と無クラッシュを台無しにすることで、これをテストすることができます...のみ:

2018年1月6日10:01:48.890801 + 0700 XXXXXX [16389:3367770] [avae] AVAEInternal.h:70:_AVAE_Checkは:必要条件が偽である:[AVAudioEngineGraph.mm:1209:Initialize :(!inputNode = nullptr ||出力ノード= nullptr)] エラーが発生しました:エラードメイン= com.apple.coreaudio.avfaudioコード= 0 "(ヌル)"

あなたがaudioEngineをチェックしていることを確認してくださいです

func play(soundName: String) { 
    if !audioEngine.isRunning { 
     return 
    } 
    // play sound 
} 

これを使用する前に実行しています。音はありませんが、それは "優雅な失敗"です。

スウィフトでは例外を正しくキャッチできないと思われますが、いくつかの例外をキャッチできない場合は、少なくとも最初にテストするメソッドを提供してください(audioEngine.areYouConfiguredProperly()など)。ああ、(Obj-Cで)このメソッドがあります[AVAudioEngine startAndReturnError:]しかし、誰かがstartEngine()関数でラップし、すべての便利な機能を排除することにしました... doh。

関連する問題