質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
iPad

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

0回答

997閲覧

SwiftでAudioKitを使う時、AKMicrophon.initでcrashする

jiyi

総合スコア7

iPad

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

1クリップ

投稿2020/04/23 17:24

編集2020/04/24 12:01

###現象
SwiftでAudioKitを用いたアプリを作成し、リリースしたところ、crashデータが複数報告されました。全て同じcrashで、ログは以下の通りでした。
自分の環境では何度もテストしているうちでは少なくとも一度も再現されておらず、原因が全くわかりません。
このcrashが発生しているデバイスはiPhone 8, X, XS, iPadなど様々で、iOSも13.3.1 ~ 13.3.4と、特定の機種・OSなどはなさそうです。
原因や対策として考えられるものがあれば、ご教授いただければ幸いです。

1 libobjc.A.dylib objc_exception_throw 2 CoreFoundation +[NSException raise:format:arguments:] 3 AVFAudio AVAE_RaiseException(NSString*,...) 4 AVFAudio _AVAE_Check(char const*, int, char const*, char const*, bool) 5 AVFAudio AVAudioEngineGraph::_Connect(AVAudioNodeImplBase*, AVAudioNodeImplBase*, unsigned int, unsigned i... 6 AVFAudio AVAudioEngineImpl::Connect(AVAudioNode*, AVAudioNode*, unsigned long, unsigned long, AVAudioFormat*) 7 AVFAudio -[AVAudioEngine connect::to:format:] 8 [アプリ名] specialized AKMicrophone.init(with:) 9 [アプリ名] AKMicrophone.init(with:) 10 [アプリ名] XXX.startAK() (←自分で作ったメソッド、後述) . . .

###ソースコード

Swift

1import SwiftUI 2import Combine 3import AudioKit 4import AVFoundation 5 6final class XXX: observableObject { 7 var isAKStart: Bool = false 8 var mic: AKMicrophone! 9 var tracker: AKFrequencyTracker! 10 var silence: AKBooster! 11 12 func startAK() { 13 mic = AKMicrophone() 14 tracker = AKFrequencyTracker(mic) 15 silence = AKBooster(tracker, gain: 0) 16 AudioKit.output = silence 17 18 do { 19 try AudioKit.start() 20 self.isAKStart = true 21 } catch { 22 AKLog("AudioKit did not start!") 23 } 24 } 25 26 func start(userData: UserData) { 27 let status = AVCaptureDevice.authorizationStatus(for: AVMediaType.audio) 28 29 if status == AVAuthorizationStatus.authorized { 30 if !self.isAKStart { 31 self.startAK() 32 } 33 } else { 34 AVCaptureDevice.requestAccess(for: AVMediaType.audio, completionHandler: { (isSuccess) in 35 DispatchQueue.main.async { 36 if (isSuccess) { 37 if !self.isAKStart { 38 self.startAK() 39 } else { 40 //許可がない場合の処理 41 } 42 } 43 } 44 }) 45 } 46 47 } 48} 49 50//~~~~~~~~~~~~~~~~~~~~~~~ 51//~~~~~~~~~~~~~~~~~~~~~~~ 52import SwiftUI 53 54struct ContentView: View { 55 @EnvironmentObject var xxx: XXX 56 57 var body: some View { 58 VStack { 59 //いろいろ 60 } 61 .onAppear { 62 self.xxx.start() 63 } 64 } 65}

###試したこと
マイクへのアクセス許可がない状態でAKMicrophoneを使おうとしたのが原因かと思い、マイクへのアクセス許可がない場合はAKMicrophoneを使わないように仕様を変更した(上記ソースコードには反映済み)のですが、その新しいversionでもcrashデータが報告されていました。

###追記
提案いただいたこちら(https://github.com/AudioKit/AudioKit/issues/969)を確認し、アプリ使用中に電話を着信して応答したところ、以下のようなログが出ました。
crashは再現できませんでしたが、エラーは出ており、それも気になるところではあります。

[aurioc] AURemoteIO.cpp:1590:Start: AUIOClient_StartIO failed (561017449) [avae] AVAEInternal.h:109 [AVAudioEngineGraph.mm:1544:Start: (err = PerformCommand(*ioNode, kAUStartIO, NULL, 0)): error 561017449 [general] AudioKit+StartStop.swift:restartEngineAfterRouteChange(_:):198:error restarting engine after route change (AudioKit+StartStop.swift:restartEngineAfterRouteChange(_:):198) [general] AudioKit+StartStop.swift:restartEngineAfterConfigurationChange(_:):144:engine not restarted after configuration change since app was not active and does not support background audio (AudioKit+StartStop.swift:restartEngineAfterConfigurationChange(_:):144) [general] AudioKit+StartStop.swift:restartEngineAfterRouteChange(_:):183:engine not restarted after route change since app was not active and does not support background audio (AudioKit+StartStop.swift:restartEngineAfterRouteChange(_:):183) [general] AudioKit+StartStop.swift:restartEngineAfterConfigurationChange(_:):144:engine not restarted after configuration change since app was not active and does not support background audio (AudioKit+StartStop.swift:restartEngineAfterConfigurationChange(_:):144)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jiyi

2020/04/24 11:59

ありがとうございます。 今確認し、テストでアプリを使用している状態で別のデバイスから電話をかけてみたのですが、crashを再現することはできませんでした。 そのときのログを質問に追記しましたので、ご確認いただければ幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問