SwiftでSFSpeechRecognizerとAVSpeechSynthesizerを一つのアプリで行うときのエラー回避方法
Swift4.2での質問です。
SFSpeechRecognizerとAVSpeechSynthesizerを一つのアプリで使うとき、
例えばRecognizeViewControllerで音声認識を行い、SpeechViewControllerのspeechButtonで音声読み上げを行うよう組んだのですが、Thread 1: signal SIGABRTのエラーが出てしまい困っているので質問させていただきます。https://qiita.com/croquette0212/items/bf0e41ca1b65c6d320b4
この記事を読み、AVSessionのsetCategoryによる使い分けを行えばよいと思い、
音声認識処理では録音処理のメソッドに
private func startRecording() throws {
//ここに録音する処理を記述
if let recognitionTask = recognitionTask {
//リセット処理
recognitionTask.cancel()
self.recognitionTask = nil
let audioSession = AVAudioSession.sharedInstance()
try audioSession.setCategory(AVAudioSession.Category.record, mode: .default)
try audioSession.setMode(AVAudioSession.Mode.measurement)
try audioSession.setActive(true, options: .notifyOthersOnDeactivation)
}
}
と書き、 SpeechViewControllerの方には
var talker = AVSpeechSynthesizer()
override func viewDidLoad() {
//speechButtonの生成処理
speechButton.addTarget(resultCardView, action: #selector(speachButtonTapped(sender: )), for: .touchUpInside
}
@objc func speachButtonTapped(sender: Any) {
let avSession = AVAudioSession.sharedInstance()
try? avSession.setCategory(AVAudioSession.Category.ambient, mode: .default, options: .mixWithOthers)
let utterance = AVSpeechUtterance(string:self.Jplabel.text!)
utterance.voice = AVSpeechSynthesisVoice(language: "en-En")
utterance.volume = 1.2
// 実行
self.talker.speak(utterance)
}
このように記述したのですが、Thread 1: signal SIGABRTとなってしまいました。
わかる方がいましたら、お願いいたします。