7

AVSpeechSynthesizerシングルトンで使用しています。iOS 8では、アプリがしばらくの間バックグラウンドになると、再開するとAVSpeechSynthesizerシングルトンが話さなくなります。この問題はiOS 7では発生しません。

アプリがバックグラウンドになると、次のメッセージがログに表示されます。

AVSpeechSynthesizer Audio interruption notification: {
    AVAudioSessionInterruptionTypeKey = 1;
}

AVSpeechSynthesizerシングルトンのinitメソッドで次のように初期化します。

    self.speechSynthesizer = [[AVSpeechSynthesizer alloc] init];
    self.speechSynthesizer.delegate = self;

そして私はこのように話しますutterance

AVSpeechUtterance *utt = [[AVSpeechUtterance alloc] initWithString:dialogue];
utt.voice = [AVSpeechSynthesisVoice voiceWithLanguage:voice];

utt.pitchMultiplier = pitch;
utt.rate = rate;
utt.preUtteranceDelay = preDelay;
utt.postUtteranceDelay = postDelay;
utt.volume = volumeSetting;

[self.speechSynthesizer speakUtterance:utt];

iOS 8でこのようなものを見た人はいますか?

4

3 に答える 3

13

私は一日中この狂気を追い求め、解決策を見つけたと思います。私の問題はAVSpeechSynthesizer、電話がかかる瞬間まで、他のオーディオをダッキングすることで、フォアグラウンドとバックグラウンドで正常に機能することでした.

その瞬間、話すことはエラーなしで静かに機能しなくなります。すべてのオブジェクトはまだそこにありますが、デリゲート呼び出しは呼び出されず、開始も終了もされません。

電話をかけると、アプリに に関する通知が届くことに気付きましたAudioRouteChanged。したがって、それが発生した場合、私はスピーチのセットアップを再作成します。基本的に、既存のものを破棄AVSpeechSynthesizerして再作成します。それ以降、話すことは機能し続けます。電話中でも機能します:)

于 2015-02-26T14:53:25.273 に答える
0

さらに調査したところ、アプリがバックグラウンドで起動されたときに AVSpeechSynthesizer が壊れているようです (バックグラウンド フェッチなどにより)。話す前にアプリが現在アクティブかどうかを確認するための簡単な呼び出しで、問題が解決します。

if ([UIApplication sharedApplication].applicationState == UIApplicationStateActive)
    [self.speechSynthesizer speakUtterance:utt];
于 2014-11-07T08:52:02.510 に答える