AVSpeechSynthesizer avec ios8

HI a-t-on essayé AvSpeechSynthesizer sur iOS 8? J'ai fait une application rapide sur Xcode 6 mais aucun son n'est sorti, j'ai couru la même chose sur le Xcode 5 et fonctionne sans accroc.

exemple de code de http://nshipster.com/avspeechsynthesizer/

NSSsortingng *ssortingng = @"Hello, World!"; AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithSsortingng:ssortingng]; utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"]; AVSpeechSynthesizer *speechSynthesizer = [[AVSpeechSynthesizer alloc] init]; [speechSynthesizer speakUtterance:utterance]; 

Bug avec Xcode6?

== Modifier === On dirait bug / problème avec iOS 8 sim, iOS7.1 Sim avec Xcode6 fonctionne bien ..

    Yup, c'est un bug. À partir de iOS8 GM, il semble que la première tentative pour faire AVSpeechSynthesizer parler un AVSpeechUtterance se traduira par le silence.

    Ma solution consiste à faire en sorte qu'AVSpeechSynthesizer prononce un énoncé à caractère unique immédiatement après son initialisation. Ce sera silencieux, et après votre AVSpeechSynthesizer fonctionnera normalement.

     AVSpeechUtterance *bugWorkaroundUtterance = [AVSpeechUtterance speechUtteranceWithSsortingng:@" "]; bugWorkaroundUtterance.rate = AVSpeechUtteranceMaximumSpeechRate; [self.speechSynthesizer speakUtterance:bugWorkaroundUtterance]; 

    C'est toujours un problème sur 8.0.2 (Xcode 6.0.1, test sur iPad mini 1).

    Ceci est seulement un problème si vous définissez la propriété voice pour AVSpeechUtterance dans une langue autre que le dialecte par défaut (dans mon cas, English (US) est la valeur par défaut). Pour être clair, le problème peut être résolu en forçant AVSpeechSynthesizer à parler une instance AVSpeechUtterance vide dans la langue non par défaut en premier. Cette dernière partie est importante.

    Voici un getter simple qui implémente un correctif.

     - (AVSpeechUtterance *)utterance { if (!_utterance) { ... _utterance = [AVSpeechUtterance speechUtteranceWithSsortingng:@"hello world"]; [_utterance setRate:0.2f]; [_utterance setVoice:[AVSpeechSynthesisVoice voiceWithLanguage:language]]; // iOS 8 bug fix AVSpeechUtterance *dummyUtterance = [AVSpeechUtterance speechUtteranceWithSsortingng:@" "]; [dummyUtterance setVoice:[AVSpeechSynthesisVoice voiceWithLanguage:language]]; [self.synthesizer speakUtterance:dummyUtterance]; } return _utterance; } 

    EDIT: le commentaire sur la recréation du synthétiseur ci-dessous semble être pertinent pour iOS8.0.0 et GM seulement – dans iOS8.0.2 cela ne semble pas nécessaire et la solution de contournement de user848555 fonctionne bien pour moi maintenant. Il est intéressant de noter que la solution de contournement user848555 semble toujours nécessaire (du less si vous changez de langue), malgré les commentaires que j'ai pu voir sur d'autres threads qui ont été corrigés dans iOS8.0.2.

    Cela semble donc être un bug lié aux voix de faible qualité – il est référencé dans les notes de version ici (search de synthèse de la parole sur cette page):

    [ https://developer.apple.com/library/ios/releasenotes/General/RN-iOSSDK-8.0/%5D%5B1%5D

    La solution officielle Apple consiste à download une voix de haute qualité pour la voix qui ne fonctionne pas (par défaut, une voix est toujours de haute qualité – l'anglais américain dans les pays anglophones, probablement dans d'autres pays). vous vous en tenez à la voix par défaut.

    La solution de contournement user848555 ne fonctionne pas de manière isolée si (comme moi) vous changez constamment de voix. Cependant, si vous recréez le speechSynthesizer sur chaque énoncé qui semble fonctionner. Voici mon code (il est spécifique à mon application donc vous devrez changer quelques choses mais cela devrait illustrer le point). Il utilise la correction d'un énoncé vide de user848555 plus un recréer sur chaque énoncé.

     -(void)speakGerman:(NSSsortingng*)text{ if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1 || [self.dataController.speakSetting integerValue] == 2) return; // iOS8 fix speechSynthesizer = [[AVSpeechSynthesizer alloc]init]; AVSpeechUtterance *bugWorkaroundUtterance = [AVSpeechUtterance speechUtteranceWithSsortingng:@" "]; bugWorkaroundUtterance.rate = AVSpeechUtteranceMaximumSpeechRate; [speechSynthesizer speakUtterance:bugWorkaroundUtterance]; AVSpeechUtterance *utterance; utterance = [AVSpeechUtterance speechUtteranceWithSsortingng:text]; utterance.voice = germanVoice; utterance.rate = 0.2; utterance.preUtteranceDelay = 0.0; [speechSynthesizer speakUtterance:utterance]; } 

    C'est en effet un bug dans XCode 6 et iOS 8.0.2. Tant que vous avez configuré la propriété "voiceWithLanguage", il ne parlera pas la phrase pour la première fois. Donc la solution actuelle est de parler une string vide avec la langue désirée.

    J'ai trouvé cette class résolu le problème (ou au less est une bonne solution de contournement) pour moi …

    https://github.com/dale-moore/iOSTextToSpeech