TextToSpeech et accessibilité dans Windows Phone 8

Le SDK de Windows phone 8 vient enfin de sortir et après avoir pris le temps de parcourir les nouvelles fonctionnalités voici mon premier article sur le sujet.

Depuis le lancement de Windows phone, une chose m’a toujours choqué : la taille des polices utilisées. Elles sont parfois si petites que l’on doit y regarder à deux fois avant d’être capable de lire le texte auquelle elles sont appliquées. Pour les mal-voyants ou personnes sans lunette (mais en ayant besoin) cela peut être ennuyeux !

Grace à Windows Phone 8 notre application va pouvoir conserver la taille de ses fontes tout en donnant la possibilité à l’utilisateur qui le souhaite d’accéder plus facilement au contenu de ce texte. Comment ? Tous simplement en le lisant !


Windows Phone 8 sait lire !


En effet, Windows Phone 8 contient une toute nouvelle API lui permettant de lire un texte.
Pas besoin d’accéder à internet, c’est intégré au système !
La voix sera masculine ou féminine et aura un accent selon la langue qui lui sera fourni.

voici les informations sur les voix installées par défaut dans Windows Phone 8 :

Microsoft Zira Mobile, en-US, Female, Microsoft Zira Mobile – English (United States)
Microsoft Stefan Mobile, de-DE, Male, Microsoft Stefan Mobile – German (Germany)
Microsoft George Mobile, en-GB, Male, Microsoft George Mobile – English (United Kingdom)
Microsoft Susan Mobile, en-GB, Female, Microsoft Susan Mobile – English (United Kingdom)
Microsoft Heera Mobile, en-IN, Female, Microsoft Heera Mobile – English (India)
Microsoft Ravi Mobile, en-IN, Male, Microsoft Ravi Mobile – English (India)
Microsoft Mark Mobile, en-US, Male, Microsoft Mark Mobile – English (United States)
Microsoft Katja Mobile, de-DE, Female, Microsoft Katja Mobile – German (Germany)
Microsoft Laura Mobile, es-ES, Female, Microsoft Laura Mobile – Spanish (Spain)
Microsoft Pablo Mobile, es-ES, Male, Microsoft Pablo Mobile – Spanish (Spain)
Microsoft Raul Mobile, es-MX, Male, Microsoft Raul Mobile – Spanish (Mexico)
Microsoft Sabina Mobile, es-MX, Female, Microsoft Sabina Mobile – Spanish (Mexico)
Microsoft Julie Mobile, fr-FR, Female, Microsoft Julie Mobile – French (France)
Microsoft Paul Mobile, fr-FR, Male, Microsoft Paul Mobile – French (France)
Microsoft Cosimo Mobile, it-IT, Male, Microsoft Cosimo Mobile – Italian (Italy)
Microsoft Elsa Mobile, it-IT, Female, Microsoft Elsa Mobile – Italian (Italy)
Microsoft Ayumi Mobile, ja-JP, Female, Microsoft Ayumi Mobile – Japanese (Japan)
Microsoft Ichiro Mobile, ja-JP, Male, Microsoft Ichiro Mobile – Japanese (Japan)
Microsoft Adam Mobile, pl-PL, Male, Microsoft Adam Mobile – Polish (Poland)
Microsoft Paulina Mobile, pl-PL, Female, Microsoft Paulina Mobile – Polish (Poland)
Microsoft Daniel Mobile, pt-BR, Male, Microsoft Daniel Mobile – Portuguese (Brazil)
Microsoft Maria Mobile, pt-BR, Female, Microsoft Maria Mobile – Portuguese (Brazil)
Microsoft Irina Mobile, ru-RU, Female, Microsoft Irina Mobile – Russian (Russia)
Microsoft Pavel Mobile, ru-RU, Male, Microsoft Pavel Mobile – Russian (Russia)
Microsoft Kangkang Mobile, zh-CN, Male, Microsoft Kangkang Mobile – Chinese (Simplified, PRC)
Microsoft Yaoyao Mobile, zh-CN, Female, Microsoft Yaoyao Mobile – Chinese (Simplified, PRC)
Microsoft Danny Mobile, zh-HK, Male, Microsoft Danny Mobile – Chinese (Traditional, Hong Kong S.A.R.)
Microsoft Tracy Mobile, zh-HK, Female, Microsoft Tracy Mobile – Chinese (Traditional, Hong Kong S.A.R.)
Microsoft Yating Mobile, zh-TW, Female, Microsoft Yating Mobile – Chinese (Traditional, Taiwan)
Microsoft Zhiwei Mobile, zh-TW, Male, Microsoft Zhiwei Mobile – Chinese (Traditional, Taiwan)

Pour lire un texte on utilisera le code suivant :

var t2s = new SpeechSynthesizer();
t2s.SpeakTextAsync("Bonjour le monde !");

Par défaut la voix utilisée est féminie/américaine.
pour qu’il puisse lire avec une voix française on utilisera la propriété All de la classe InstallatedDevices puis on recherchera une voix qui correspond à aux critères désirés (ici langue et type de voix):

var t2s = new SpeechSynthesizer();

var v = InstalledVoices.All.FirstOrDefault( (p)=> p.Language == "fr-FR" && p.Gender == VoiceGender.Male);

t2s.SetVoice(v);

t2s.SpeakTextAsync("Bonjour le monde !");

Dans l’exemple ci-dessus on lit un texte avec une voix française et masculine.


Accessibilité et voix


Pour rendre accessible une application par la voix, je suis partie de principe que seule les TextBlocks peuvent être lus.
Mais pour ne pas dénaturer l’expérience utilisateur, il faut rester appuyer 500ms avant de voir une petite animation changer l’opacité du textblock, indiquant qu’il est prêt à lire le texte. Le texte sera lu une fois le doigt relevé.

J’ai donc crée un behavior capable de se greffer sur un TextBlock.

	
<TextBlock
behaviors:SpeechBehavior.CanSpeak="True"		
behaviors:SpeechBehavior.Gender="Male"	
behaviors:SpeechBehavior.Language="fr-FR"
Text="Bonjour le monde !"
/>


Installation du behavior SpeechBehavior


Pour bénéficier du behavior, il suffit d’intéger ce fichier à votre code source SpeechBehavior.cs (enlever l’extension _.txt du fichier).

puis dans votre page d’ajouter le namespace suivant :

<phone:PhoneApplicationPage
  xmlns:behaviors="clr-namespace:SamuelBlanchard.Accessibility"
>
</phone>

Vous pourrez ensuite utilisez le behavior sur vos TextBlocks


Plus loin


Mettre ce behavior sur chaque TextBlock de notre application pourrait s’avérer être fatiguant, d’ailleurs on a pas toujours accès à ces TextBlocks (lorsqu’ils sont contenu dans d’autres controles).

Le behavior peut être appliqué à n’importe qu’elle élément XAML contenant des Textblocks.
Par exemple on peut mettre sur la page les behaviors de base puis changer la langue pour telle contenue ou empêcher tel TextBlock d’être lisible (CanSpeak= »False »).

<phone:PhoneApplicationPage 
xmlns:behaviors="clr-namespace:SamuelBlanchard.Accessibility" 

behaviors.SpeechBehavior.CanTalk="True"  
behaviors.SpeechBehavior.Gender="Female" 
behaviors.SpeechBehavior.Language="en-US">

<!-- passe en français -->
<StackPanel behaviors.SpeechBehavior.Language="fr-FR">
    <!-- Lit avec les paramètres par défaut mais en Français -->
    <TextBlock Text="Bonjour le monde"/>
     <!-- Lit avec une voix masculine francaise -->
    <TextBlock behaviors.SpeechBehavior.Gender="Male" Text="Bonjour le monde !"/>
    <!-- Ne lit rien -->
    <TextBlock behaviors.SpeechBehavior.CanTalk="False" Text="Bonjour le monde !"/>	
</StackPanel>
</phone:PhoneApplicationPage>

Bref, le comportement est basiquement le même que dans l’utilisation de l’effet Tilt pour les boutons (effet présent dans le ToolKit).
Il est a noté que si aucune langue n’est spécifiée, la langue de l’interface utilisateur sera utilisée.

Vous trouverez ci-dessous une vidéo montrant le behavior en action.







Conclusion



L’utilisation du TextToSpeech est très simple à utiliser dans Windows Phone 8 !
Avec le behavior SpeechBehavior la mise en place dans XAML est à la fois fun et réelement utile.
N’hésitez pas à la mettre dans vos applications !

Pour rappel, le lien vers le Behavior se trouve ici.

PS : Ne possédant pas de device, ce code n’a été tester que sur l’émulateur WP8.




leave your comment