Les bibliothèques standard de reconnaissance vocale et de synthèse vocale dans iOS offrent de nombreuses possibilités. D'après le rapportVolkovRomainvous apprendrez à apprendre à votre application à prononcer du texte et à personnaliser le doublage avec un minimum de code. Roma a passé en revue l'API de reconnaissance vocale, ses limites et ses fonctionnalités, le cycle de vie d'une demande de reconnaissance et les méthodes de travail en mode hors ligne. Des exemples UX, des solutions de contournement des bogues existants et des fonctionnalités de travail avec une session audio vous attendent.
- Bonjour à tous, je m'appelle Roman Volkov. Aujourd'hui, nous allons parler de la façon d'apprendre à votre application mobile à communiquer avec vos utilisateurs.
Avant de commencer, brièvement sur moi. Avant le développement d'iOS, j'ai été impliqué dans le développement de systèmes d'intégration dans le secteur bancaire et le développement de systèmes analytiques dans le secteur pétrolier. Je sais de première main ce qu'est la norme PCI DSS et, par exemple, comment les ingénieurs comprennent ce qui se passe dans un puits pendant le forage, uniquement sur la base des données de température.
Depuis 2016, je fais du développement iOS. J'ai de l'expérience à la fois en freelance et en travail à distance, expérience de participation au lancement de plusieurs startups. J'ai également fait une demande de marque pour Rolls Royce.
En 2018, j'ai rejoint l'équipe Prisma, développé l'application Prisma et participé au développement et au lancement de Lensa Photo Editor. En 2019, j'ai rejoint Yandex en tant que développeur iOS. Depuis 2020, je dirige le groupe de développement mobile Yandex.Translator. L'application Translator n'est plus seulement une application pour travailler avec du texte. Nous avons beaucoup de fonctionnalités intéressantes telles que la traduction de photos, le mode de dialogue, la saisie vocale, le doublage et plus encore.
Commençant tout juste à plonger dans le sujet du travail avec le son dans iOS, je n'ai trouvé aucun matériel compact qui inclurait le travail avec une session audio, et avec la synthèse, et avec la reconnaissance vocale. C'est pourquoi j'ai décidé de donner cette conférence.
Ce sera en quatre parties. Tout d'abord, nous allons parler de ce qu'est une session audio, comment la travailler correctement, comment elle affecte le fonctionnement de votre application. Ensuite, passons à la synthèse vocale. Examinons comment vous pouvez envoyer un texte aux personnes en quelques lignes de code directement sur le téléphone. Ensuite, nous passerons à la reconnaissance vocale. Et en conclusion, voyons comment toutes ces fonctionnalités peuvent être fournies à l'utilisateur en mode hors ligne et quelles fonctionnalités il possède.
Il existe de nombreuses options pour utiliser le doublage et la reconnaissance vocale. Mon préféré est de convertir les messages audio des autres en texte. Et je suis heureux que, par exemple, l'équipe de Yandex. Messenger ait créé une telle fonctionnalité. Espérons que d'autres messagers le rattraperont et le feront aussi à la maison.
Nous passons en douceur à la première partie du rapport, c'est AVAudioSession.
Une session audio est une couche entre notre application et le système d'exploitation. Plus précisément, entre votre application et le matériel pour travailler avec le son: haut-parleur et microphone. Sur iOS, watchOS et tvOS, chaque application dispose d'une session audio par défaut préconfigurée. Ce préréglage varie d'un système d'exploitation à l'autre.
Parlant spécifiquement d'iOS, la session audio par défaut prend en charge la lecture audio, mais interdit tout enregistrement. Si le commutateur du mode silencieux est réglé sur le mode «silencieux», alors absolument tous les sons de votre application sont coupés. Et troisièmement, le verrouillage de l'appareil empêche la lecture de tous les sons de votre application.
La configuration d'une session audio se compose de trois points: il s'agit d'un choix de catégorie, de mode et d'options supplémentaires. Nous examinerons chacun des points séparément.
Commençons par la catégorie. Une catégorie est un ensemble de paramètres pour le comportement de base d'une session audio. Une catégorie est un ensemble de paramètres qui permettent au système d'exploitation de correspondre autant que possible, disons, au nom de cette catégorie. Par conséquent, Apple recommande de choisir une catégorie pour votre application qui soit aussi proche que possible de celle disponible. Il existe actuellement six catégories disponibles dans iOS 13. Il existe également une septième catégorie, mais elle est marquée comme obsolète et ne doit pas être utilisée.
Dans cet exposé, nous examinerons trois catégories: lecture, enregistrement et lecture et enregistrement. Le mode vous permet de compléter les capacités de la catégorie définie, car certains modes ne sont disponibles que pour certaines catégories.
Par exemple, sur la diapositive, vous voyez le mode de lecture de film et il ne peut être défini que pour la catégorie Lecture.
Réglage du mode de lecture vidéo permet à la session audio d'améliorer automatiquement la qualité du son de lecture pour les haut-parleurs intégrés et pour le casque. Dans cet exposé, nous n'utiliserons que le mode «par défaut». Mais je tiens à noter que si vous utilisez une paire incompatible de catégorie et de mode, le mode par défaut sera utilisé.
Le troisième concerne les options, les paramètres de point pour la session audio. Par exemple, vous pouvez personnaliser la façon dont l'audio de votre application se mélange avec l'audio d'autres applications, configurer la désactivation appropriée de la session audio afin que les autres applications sachent que votre application a fini de travailler avec l'audio.
Tout d'abord, nous allons examiner la définition de la catégorie de lecture, à savoir la lecture. C'est l'une des catégories audio uniquement. S'il est défini, l'activation de la session audio interrompt la lecture d'autres fichiers audio, par exemple à partir d'autres applications.
Il est également important que le son soit lu même si le commutateur de sourdine est réglé sur muet.
Il existe également une option permettant de jouer en arrière-plan pour cette catégorie, mais pour cela, votre application doit activer Audio, AirPlay et Image dans l'image.
Considérez les deux options visibles sur la diapositive. Le premier est mixWithOthers. Si vous activez la session audio avec cette option, la lecture du son dans votre application sera mixée avec le son en cours de lecture, par exemple avec de la musique, à un niveau de volume. Mais si vous voulez que votre son prévale en termes de volume sur la lecture en cours, vous pouvez utiliser l'option duckOthers. Il réduit le volume du son joué en arrière-plan et le restitue lorsque le son joué dans votre application est terminé.
Par exemple, cela peut être observé dans les applications de navigation: pour une annonce d'itinéraire, ce que vous écoutez maintenant est mis en sourdine, l'annonce est lue, puis tout revient à son état d'origine.
Considérons la possibilité de configurer une session audio pour la reconnaissance à partir d'un microphone. La catégorie Enregistrement coupe le son de tous les fichiers audio pendant qu'une session audio avec cette catégorie est active dans l'application. L'enregistrement ne peut pas couper les sons du système tels que les appels, les alarmes - en général, les sons standard qui ont une priorité plus élevée.
Vous pouvez également ajouter l'option allowBluetoothA2DP, cela vous permet d'utiliser des casques tels que des AirPods pour enregistrer le son d'un microphone et y jouer du son. Il existe une option plus ancienne pour cela, qui ressemble à allowBluetooth, mais cela diminue beaucoup la qualité du son.
Nous utilisions l'ancienne option et les utilisateurs se sont plaints de ne pas être satisfaits de la qualité du son joué et enregistré dans l'application. Nous avons changé l'option, tout s'est amélioré.
Si vous souhaitez utiliser à la fois la reconnaissance vocale et la synthèse vocale, utilisez la catégorie playAndRecord. Ensuite, dans la session audio activée, vous pouvez utiliser à la fois l'enregistrement et la lecture du son.
L'option notifyOthersOnDeactivation doit être considérée séparément. Il est utilisé dans la méthode d'activation de la session audio. Pourquoi est-ce si important?
Si la session audio a été désactivée avec cette option, les autres applications recevront l'identification AVAudioSessionInterruptionNotification avec le paramètre AVAudioSessionInterruptionTypeEnded avec le paramètre indiquant que l'interruption de leur session audio est terminée et qu'elles peuvent continuer à travailler avec l'audio, qui a été démarré avant d'être interrompu.
Ce scénario est possible si vous utilisez la catégorie lecture dans une application sans l'option mixWithOthers, car sinon vous n'interrompez pas le son d'une autre application, votre audio sera simplement mixé avec une autre application.
L'utilisation de cette option et la gestion correcte de la modification vous permettent de fournir aux utilisateurs une expérience utilisateur confortable lorsqu'ils travaillent avec votre application.
Sur la diapositive, vous pouvez voir un exemple de la façon de gérer correctement la notification indiquant que votre application a été interrompue par une autre au cours de la session audio, et la situation à la fin de l'interruption. Autrement dit, nous souscrivons à une certaine notification et, peut-être, de deux types: lorsque l'interruption vient de commencer et lorsqu'elle s'est terminée.
Dans le premier cas, vous pouvez enregistrer l'état, et dans le second, vous pouvez continuer à jouer le son qui a été interrompu par une autre application.
Voici un exemple de la façon dont cela pourrait fonctionner:
La vidéo sera
lue à partir du moment où l'exemple est démontré.Dans cet exemple, la musique a été jouée dans une autre application, à savoir dans VLC, puis j'ai commencé le doublage dans notre application. La musique a été interrompue, le discours synthétisé a été joué, puis la musique a repris automatiquement la lecture.
Je tiens à souligner que toutes les applications ne gèrent pas correctement la situation lorsque leur son est interrompu. Par exemple, certaines messageries instantanées populaires ne reprennent pas la lecture audio.
Résumons. Nous avons analysé le principe de la session audio. Nous avons examiné les possibilités de configurer la session audio en fonction des exigences de vos applications et appris comment activer et désactiver commodément la session audio pour l'utilisateur.
Passez. Synthèse de la parole.
La diapositive montre un diagramme des classes impliquées dans le processus de synthèse vocale. Les classes principales sont AVSpeechSynthesiser, AVSpeechUtterance et AVSpeechSynthesisVoice avec ses paramètres.
Par ailleurs, je note qu'il existe un AVSpeechSynthesizerDelegate qui vous permet de recevoir des notifications sur le cycle de vie de l'ensemble de la demande. Puisque le son du texte joue le son, l'AVAudioSession discuté précédemment sera ici une dépendance implicite.
Vous pouvez faire une demande de reconnaissance sans configurer de session audio, mais pour toute application de production, il est important de comprendre comment la configurer. Nous en avons parlé plus tôt.
L'exemple le plus court de la façon dont vous pouvez effectuer rapidement une demande de synthèse vocale. Vous devez créer un objet de la classe AVSpeechUtterance, dans lequel vous spécifiez le texte que vous souhaitez parler, la voix et la langue souhaitées. Si vous ne spécifiez pas de langue lors de la création d'une voix, la langue par défaut de votre téléphone sera utilisée. Mais nous parlerons du choix des voix et de la manière de travailler avec elles dans les prochaines diapositives.
Ensuite, vous créez un objet de la classe AVSpeechSynthesizer et appelez la méthode speak. Tout. Après cela, le texte sera synthétisé et joué, vous entendrez le résultat.
Mais en fait, ce n'est que le début. La synthèse vocale a beaucoup plus de possibilités, dont nous allons maintenant parler.
Tout d'abord, vous pouvez régler la vitesse lors de la réception du son. La vitesse est spécifiée sous la forme d'un nombre réel compris entre zéro et un. Le taux réel varie de zéro à un si vous définissez la propriété taux sur une plage de 0 à 0,5.
Si vous définissez la valeur du taux dans la plage de 0,5 à 1, le taux change proportionnellement en valeurs de 1X à 4X.
Un exemple de la façon dont vous pouvez travailler avec vitesse.
Dans AVFoundation, il existe une constante AVSpeechUtteranceDefault, qui est en fait 0,5, ce qui équivaut à la vitesse normale de lecture audio.
Vous pouvez également spécifier une vitesse égale à la moitié de la vitesse habituelle, vous devez spécifier une valeur de 0,25. Si vous spécifiez 0,75, la vitesse sera augmentée de 2,5 fois la vitesse normale. De plus, pour plus de commodité, il existe des constantes pour la vitesse minimale et maximale.
Je vais maintenant jouer quelques exemples:
La vidéo sera lue à partir du moment où l'exemple
est montré. Il s'agit d'un exemple d'un Macintosh parlant de sa propre voix pour la première fois lors d'une présentation Apple. Et c'était un exemple de vitesse de parole synthétisée normale.
C'est 2 fois plus lent.
C'est 2,5 fois plus rapide.
Séparément, avec les dernières lignes, j'ai fait ressortir les propriétés preUtteranceDelay et postUtteranceDelay. Il s'agit du délai avant que le son ne commence à jouer et du délai après la fin de la lecture. Il est pratique à utiliser lorsque vous mélangez votre application avec le son d'autres applications et que vous souhaitez que le volume diminue, après un certain temps et que vous perdez votre résultat. Ensuite, ils ont attendu encore un peu, et seulement après cela, le volume d'une autre application est revenu à sa position d'origine.
Voyons le paramètre suivant - la sélection de la voix. Les voix pour la synthèse vocale sont principalement divisées en fonction des paramètres régionaux, de la langue et de la qualité. AVFoundation propose plusieurs façons de créer ou d'obtenir un objet AVSpeechSynthesisVoice. Le premier est par identification vocale. Chaque voix a son propre identifiant unique et une liste de toutes les voix disponibles peut être trouvée en accédant à la propriété statique SpeechVoice. L'obtention de cette propriété présente quelques particularités, nous en reparlerons plus loin.
Il est à noter que si vous passez un identifiant non valide au constructeur, le constructeur retournera "non".
La deuxième option est de l'obtenir par le code de langue ou de paramètres régionaux. Je tiens également à noter qu'Apple dit que les voix Siri ne sont pas disponibles, mais ce n'est pas tout à fait vrai: nous avons réussi à obtenir les identifiants de certaines des voix utilisées dans Siri sur certains appareils. C'est peut-être un bug.
Les voix ont deux qualités - par défaut et améliorées. Pour certaines voix, vous pouvez télécharger une version améliorée, nous en parlerons dans la dernière section, nous discuterons de la façon dont vous pouvez télécharger les voix nécessaires.
Un exemple de la façon dont vous pouvez sélectionner une voix spécifique. La première manière - par un identifiant spécifique, la seconde - par la ligne indiquant le code de la langue, la troisième - par une locale spécifique.
Maintenant, je veux lire deux exemples de doublage du même texte avec des paramètres régionaux différents.
La vidéo sera lue à partir du moment où l'exemple est démontré, la
deuxième option, me semble-t-il, est plus proche de la prononciation russe.
Le sexe est également apparu dans iOS 13. Et cette propriété n'est disponible que sur iOS 13 et supérieur, elle ne fonctionne que pour les voix qui ont été ajoutées dans iOS 13. Par conséquent, le sexe est spécifié comme une énumération et a trois propriétés: Femme, Homme et Non spécifié.
Dans notre application, vous pouvez sélectionner le sexe de la voix avec laquelle le texte sera lu. Pour les anciennes voix, nous avons fait une liste nous-mêmes et la conservons dans notre application. Séparer quelle voix nous considérons masculine et quelle voix féminine, pour ces voix pour lesquelles le système renvoie Non spécifié.
Dans iOS 13.1, la liste des votes peut renvoyer une liste vide lors du premier appel. Solution: vous pouvez réinterroger l'ensemble de la liste une fois toutes les quelques secondes. Dès qu'il revient non vide, nous pensons avoir enfin reçu une liste de votes à jour.
Ce bogue a été corrigé dans les versions ultérieures d'iOS, mais ne soyez pas surpris si vous voyez cela dans vos applications.
Un point intéressant que j'ai rencontré en recherchant la documentation: il existe une propriété statique AVSpeechSynthesisVoiceAlexIdentifier. C'est un identifiant très intéressant, car tout d'abord, tous les appareils ne peuvent pas créer une voix avec cet identifiant. Deuxièmement, je ne vois pas pourquoi il est situé séparément. Troisièmement, si vous obtenez une voix avec cet identifiant, cette voix a une classe unique et différente.
Dans le même temps, l'étude des en-têtes de framework ne m'a rien apporté d'utile et d'intéressant. Si vous connaissez des informations sur cet identifiant - pourquoi est-il nécessaire, pourquoi il est apparu, veuillez me le dire. Je n'ai pas pu trouver de réponse à cette question.
Ici, vous pouvez voir un exemple de la façon dont nous avons fait le choix de la voix en fonction des paramètres régionaux, du sexe dans l'interface et de la façon dont nous donnons la possibilité de spécifier la vitesse de la voix pour une langue spécifique.
Je parlerai brièvement du système de signes pour enregistrer la transcription basé sur la langue latine. Lorsque vous donnez un texte pour le doublage, vous pouvez spécifier la prononciation de mots spécifiques qu'il contient. Sur iOS, cela se fait via NSAttributedString, avec une clé spéciale. La génération de cette prononciation est disponible directement sur l'appareil iOS dans la section Accessibilité. Mais pour les gros volumes, il me semble que c'est très gênant, et vous pouvez automatiser la génération de transcription phonétique par d'autres moyens.
Par exemple, voici un référentiel pour l'anglais qui a un grand dictionnaire de corrélation de mots et de prononciation.
La diapositive montre un exemple de la façon dont vous pouvez remplacer la prononciation d'un mot particulier pour un paramètre régional. Dans ce cas, il s'agit de | təˈmɑːtəʊ |, tomate.
La vidéo sera lue à partir du moment où l'exemple
est présenté . Maintenant, l'option a été lue avec l'attribut défini sur la prononciation et sans.
Au total, nous avons cherché des moyens de créer une demande de synthèse vocale. J'ai appris à travailler avec des voix. Nous avons examiné une solution de contournement pour l'un des bogues que vous pourriez rencontrer, et avons examiné la transcription phonétique, comment vous pouvez l'utiliser.
Passons à la reconnaissance vocale. Il est présenté dans iOS sous la forme d'un framework appelé Speech, et il permet la reconnaissance vocale directement sur vos appareils.
Environ 50 langues et dialectes sont pris en charge, disponibles à partir d'iOS 10. La reconnaissance vocale nécessite généralement une connexion Internet. Mais pour certains appareils et pour certaines langues, la reconnaissance peut fonctionner hors ligne. Nous en parlerons dans la quatrième partie de mon exposé.
La reconnaissance vocale est disponible à partir du microphone et du fichier audio. Si vous souhaitez donner à l'utilisateur la possibilité de reconnaître la parole du microphone, l'utilisateur doit donner l'autorisation pour deux autorisations. Le premier est pour l'accès au microphone, le second est pour le fait que son discours sera transmis aux serveurs Apple pour reconnaissance.
Malheureusement, lorsque vous ne pouvez utiliser que la reconnaissance hors ligne, il est impossible de ne pas demander cette autorisation. Il doit quand même être demandé.
La liste est tirée du site Web d'Apple. Voici les langues et les paramètres régionaux disponibles pour la reconnaissance vocale. Mais en fait, il s'agit d'une liste de langues et de paramètres régionaux disponibles pour la dictée sur un clavier standard. Et l'API du framework Speech sous le capot fait référence à la mise en œuvre de la dictée à partir du clavier standard.
La reconnaissance vocale est gratuite pour nous en tant que développeurs, mais elle a une limite d'utilisation. Le premier est la limite des appareils et des demandes par jour. Le second est la limite totale de l'application. Et troisièmement - vous pouvez reconnaître un maximum d'une minute. La seule exception est le mode hors ligne. Dans celui-ci, vous pouvez faire la reconnaissance de longs messages audio enregistrés.
Apple, bien sûr, ne dit pas de chiffres précis sur les limites, et comme cela a été écrit ou dit dans le rapport de la WWDC, vous devez être prêt à gérer les erreurs et à leur écrire si vous rencontrez souvent, disons, ces limites. Mais nous n'avons pas un tel problème. Pour la langue russe, nous utilisons SpeechKit comme moteur de reconnaissance vocale. Et la plupart de nos utilisateurs sont russophones, nous n'avons donc pas rencontré les limites.
Assurez-vous également de penser à la confidentialité. Ne pas autoriser la voix à agir sur les données - mots de passe, données de carte de crédit. Aucune information sensible ou privée ne doit être disponible pour reconnaissance.
Sur la diapositive, vous pouvez voir un diagramme conditionnel des classes impliquées dans le processus de reconnaissance vocale. Comme pour la synthèse, travailler avec la reconnaissance fonctionne avec un fer audio, donc ici aussi, AVAudioSession est une dépendance explicite.
Soutien. Pour obtenir un ensemble de tous les paramètres régionaux pris en charge, vous devez accéder à la propriété de page supportedLocales. La prise en charge d'une langue particulière ne garantit généralement pas que la reconnaissance vocale est actuellement disponible pour cette langue. Par exemple, une connexion permanente aux serveurs Apple peut être requise.
La prise en charge des paramètres régionaux pour la reconnaissance correspond à la liste des paramètres régionaux pour la dictée dans le clavier sur iOS. Voici une liste complète . Pour vous assurer qu'un environnement local donné peut être géré immédiatement, vous pouvez utiliser la propriété isAvailable.
Dans la reconnaissance vocale sur iOS, il n'y a pas de priorité locale pour chaque langue, contrairement à la synthèse. Par conséquent, si nous prenons la première locale d'une langue spécifique dans la liste de toutes les locales, il se peut que certaines ne soient pas les plus populaires. Par conséquent, pour certaines langues dans Translator, nous avons fait la priorité d'une locale spécifique pour une langue spécifique.
Par exemple, pour l'anglais, nous utilisons en-US. La première fois qu'un utilisateur tente de reconnaître quelque chose en anglais, nous utilisons les paramètres régionaux américains.
Demande de reconnaissance à partir du fichier. Tout est simple ici. Vous devez obtenir et créer un lien vers le fichier, créer un objet SFSpeechRecognizer indiquant les paramètres régionaux que vous souhaitez utiliser. Vérifiez que la reconnaissance est disponible pour le moment. Créez SFSpeechURLRecognitionRequest à l'aide de constructions dans lesquelles vous transmettez le chemin du fichier. Et lancez la tâche de reconnaissance.
En conséquence, vous recevrez soit une erreur de reconnaissance, soit un résultat. Le résultat a une propriété isFinal, ce qui signifie que ce résultat est final et peut être utilisé ultérieurement.
Voici un exemple un peu plus complexe - une demande de reconnaissance à partir d'un microphone. Pour ce faire, nous avons également besoin d'un objet AVAudioEngine, qui est chargé de travailler avec le microphone. Nous n'entrerons pas dans les détails de la façon dont cela fonctionne. Vous définissez la catégorie souhaitée - soit .record ou .playRecord. Activez la session audio. Configurez AudioEngine et abonnez-vous pour recevoir les tampons audio du microphone. Vous les ajoutez à la demande de reconnaissance et lorsque vous avez terminé la reconnaissance, vous pouvez quitter le microphone.
Il est à noter que la propriété shouldReportPartialResults, qui est responsable de l'émission des résultats de reconnaissance temporaires, est définie sur true. Jetons un coup d'œil aux options: à quoi une application pourrait ressembler avec et sans l'indicateur shouldReportPartialResults.
La vidéo sera lue à partir du moment où l'exemple est démontré
Dans l'exemple de gauche, j'ai laissé la réponse du microphone au son, au changement de volume. On voit que je dis quelque chose. Mais tant que je n'ai pas fini de parler, vous ne voyez rien. Il faut beaucoup de temps à l'utilisateur pour obtenir le résultat de ce qu'il a dicté.
Si vous définissez shouldReportPartialResults sur true et que vous le gérez correctement, l'utilisateur verra ce qu'il dit en parlant. C'est très pratique et c'est la bonne façon de faire l'interface en termes de dictée.
Voici un exemple de la façon dont nous gérons le travail avec une session audio. À l'intérieur du Translator, nous utilisons non seulement le son que nous avons écrit, mais également d'autres frameworks qui peuvent faire quelque chose avec la session audio.
Nous avons écrit un contrôleur qui, d'une part, vérifie que les paramètres, les catégories sont ceux dont nous avons besoin, et d'autre part, il ne fait pas ce qui active et désactive constamment la session audio.
Même avant le développement du mode dialogue, la saisie vocale et le doublage activaient et désactivaient nous-mêmes la session audio. Lorsque nous avons commencé à créer le mode dialogue, il s'est avéré que ces modes on-off ajoutaient un délai supplémentaire entre le moment où vous dites quelque chose et le fait de jouer la voix.
Pour une requête de reconnaissance vocale, vous pouvez spécifier un indice - le type de parole à reconnaître. Cela peut être indéterminé, cela peut être une dictée, une recherche ou une courte confirmation. Plus souvent qu'autrement, si votre utilisateur va dire quelque chose de long, la dictée est meilleure.
À partir d'iOS 13, l'analyse audio nous est disponible. La diapositive montre les paramètres qui peuvent être obtenus à la suite d'une parole reconnue. Autrement dit, vous recevrez en conséquence non seulement ce que l'utilisateur a dit, mais également la voix dans laquelle il l'a dit.
Nous ne nous attarderons pas là-dessus pendant longtemps. Voici un exemple de la façon dont vous pouvez obtenir des analyses à la suite d'un texte reconnu.
Au total, nous avons étudié les capacités du framework Speech pour la reconnaissance vocale, appris à donner des conseils pour la reconnaissance vocale et rapidement examiné les capacités de l'analyse.
Et le dernier mais non le moindre: travailler hors ligne. La première chose dont je veux parler est une liste de langues hors ligne pour la synthèse vocale. Nulle part dans la documentation je n'ai trouvé de mention de la façon dont vous pouvez explicitement télécharger des voix pour travailler hors ligne. Les rapports et la documentation indiquent que ces voix peuvent être téléchargées, mais là où elles ne sont pas écrites.
J'ai cherché dans le système et j'ai trouvé que si vous allez dans Paramètres, dans la section Accessibilité, puis "Contenu oral" et "Voix", vous verrez d'abord une liste des langues pour lesquelles il est disponible. Deuxièmement, en passant à une langue spécifique, vous pouvez télécharger de nouvelles voix.
Et cette liste correspond clairement à ce que AVSpeechSynthesisVoice.speechVoices renvoie dans l'application. Cela signifie que vous pouvez apprendre à vos utilisateurs qu'ils peuvent télécharger les langues dont ils ont besoin pour utiliser la synthèse vocale hors ligne.
Liste des langues hors ligne pour la reconnaissance. Il n'est explicitement indiqué nulle part dans la documentation, mais à en juger par différents forums et par ce que nous avons rencontré, c'est la liste des langues et des paramètres régionaux pour eux qui peuvent travailler hors ligne sans accès à Internet.
Il convient de noter que la reconnaissance hors ligne est disponible sur les appareils dotés d'une puce A9 et plus ancienne.
Vient maintenant la partie amusante. Liste des langues hors ligne pour la reconnaissance vocale. Contrairement à la synthèse, il n'existe généralement aucun moyen de télécharger explicitement des langues pour vous-même. Si vous ajoutez une langue au clavier standard, un package hors ligne peut être téléchargé pour celle-ci. Malheureusement, ce n'est pas déterministe. Allons dans Paramètres> Général> Clavier> Dictée. Par exemple, j'ai ajouté l'espagnol. Après cela, sous la "Dictée", il apparaît un petit indice que la dictée peut être disponible pour ces langues. L'espagnol y est apparu.
Ensuite, je suis allé à notre application, j'ai désactivé Internet et, à mon grand plaisir, la reconnaissance hors ligne en espagnol a fonctionné.
Malheureusement, cela ne peut être influencé qu'indirectement, le seul moyen est d'ajouter la langue au clavier standard. Mais cela ne garantit pas que le package de reconnaissance hors ligne sera téléchargé.
Sur iOS, même si vous avez accès à Internet sur votre téléphone, vous pouvez alimenter l'appareil et y effectuer une reconnaissance vocale, si la reconnaissance est disponible, bien sûr.
Il existe une propriété supportsOnDeviceRecognition, elle est disponible depuis iOS 13. Mais cette propriété ne fonctionne pas correctement, j'ai montré une capture d'écran de l'erreur en bas à droite. Le bogue n'a été corrigé que dans la 13.2. La propriété renvoie toujours false à la première demande. Selon Apple, il renverra la valeur correcte après quelques secondes.
De plus, cette propriété peut donner false, mais en même temps, la définition de l'indicateur requireOnDeviceRecognition sur true fonctionne correctement. Cela signifie que la reconnaissance fonctionne complètement sur l'appareil, même si cet indicateur de test renvoie false.
Il peut y avoir plusieurs solutions ici. Tout d'abord, vous ne pouvez effectuer une reconnaissance hors ligne que sur iOS 13.2. Deuxièmement, vous pouvez choisir un certain nombre de secondes pour redemander cette propriété et mettre à jour l'interface utilisateur. Et troisièmement, vous pouvez oublier cette propriété: essayez de reconnaître la voix hors ligne, et en cas d'erreur, montrez-la simplement à l'utilisateur.
Nous avons examiné comment vous pouvez télécharger explicitement des packages de synthèse vocale hors ligne et avons trouvé un moyen d'essayer de forcer iOS à télécharger des packages de reconnaissance vocale hors ligne.
Vous savez maintenant comment ajouter rapidement la synthèse vocale et la reconnaissance à vos applications. J'ai tout, merci pour votre attention.