Hangleírások a Narrátorral

Befejeződött

A beszédszintézis rengeteget fejlődött a robothangok és furcsa kiejtések kora óta. A Windows Narrátor egy beépített képernyőolvasót is tartalmaz, amely rendkívül sokat segíthet a látássérült felhasználóknak. Azonban konfigurálni kell az alkalmazást ennek megfelelő használatára.

Ebben az egységben a következőket tudhatja meg:

  • Hogyan kapcsolhatja be a Narrátort és tesztelheti egy különleges narrálási attribútumokkal nem alkalmazáson.
  • Hogyan adhat speciális attribútumokat egy alkalmazáshoz a narrálás gördülékenységének javítása érdekében.
  • Hogyan teheti rendezettebbé a sztringeket és üzeneteket a megfelelő hangzás érdekében.
  • A narrálási hézagok kitölthetők a beszédszintetizátor egy egyéni példányával.

A Narrátor

Gondoskodjon róla, hogy fut a tudományos számológép alkalmazás. Módosítanunk kell a XAML-fájlt és a háttérkódot, hogy meggyőződhessünk aról, hogy a Narrátor felhasználóinak a lehető legjobb felhasználói élményben van részük.

A Narrátor bekapcsolása és tesztelése

  1. Írja be a „Narrátor beállításai” kifejezést a Windows keresősávjába, majd válassza ki a Könnyű kezelés – a Narrátor beállításai lehetőséget. Ekkor megjelenik a következő képernyő.

Turning on the narrator.

  1. Kapcsolja be A Narrátor használata kapcsolót, majd kicsinyítse le az ablakot. A narrálás problémás lehet alkalmazások közti váltáskor és szoftverek fejlesztésekor, ezért célszerű megnyitva hagyni ezt az ablakot. Így a kód módosításakor kikapcsolhatja, a teszteléshez pedig újra bekapcsolhatja.

  2. Jelölje ki a számológép Állandók megjelenítése gombját, és figyelje meg, hogy a Narrátor hogyan kezeli a leírást: Állandók megjelenítése (szüneteltetés) gomb. Azt szeretnénk, ha a Narrátor minél hasznosabb leírásokat adna, ehhez pedig ki kell használnunk a beépített funkcióit. Ezek egyike a felhasználói felület elemeinek kimondása (ebben az esetben a „gomb”).

  3. Most válassza ki a Sqrt gombot, és figyelje meg a kiejtést. A „Sqrt” a négyzetgyök gyakori rövidítése, a Narrátor ezt azonban nem tudja. Hasonlóképpen nem ismeri fel a Sin, Asin, Acos és hasonló rövidítéseket sem, különösen, ha ezek más angol szavakra is hasonlítanak. Segítenünk kell tehát a Narrátornak a jó kiejtésben.

  4. Válasszon ki néhány másik gombot (műveleteket és számokat), majd figyelje meg a narrálás minőségét. Bizonyos területeken a Narrátor rendkívül jól teljesít, más területeken azonban van hová fejlődnie.

  5. Térjen vissza az Állandók megjelenítése gombra, jelölje ki, majd válassza ki a különböző állandókat, és hallgassa meg az elhangzó szöveget. Válasszon ki több állandót, és értékelje ki a kiejtésük hasznosságát. Ahol lusták voltunk, és rövidítéseket alkalmaztunk (például „Gms”, „Ozs”, „Cms”), a kiejtés nem hasznos. A rövidítéseknek nincs haszna, ha a felhasználók nem értik őket.

  6. Végül adja meg a következő számítást: SqrtAtan0.5. Az = kiválasztása nélkül jelölje ki a számítás szövegét, és figyelje meg, hogyan kezeli a Narrátor. Most nyomja le az = billentyűt, és jelölje ki ismét a szöveget. A Narrátor szerencsére meglehetősen jól kezeli a hosszú számokat.

  7. Nyissa meg a Narrátor beállításait, és kapcsolja ki egyelőre a szolgáltatást.

A Narrátor számológépes tesztje során nyilvánvalóvá vált, hogy néhány probléma további figyelmet igényel: a matematikai függvények kiejtése, a matematikai műveletek és az állandók érthetősége.

A szöveges sztringek természetessé tétele

Ebben a szakaszban természetesebb hangzást kölcsönzünk a Narrátornak a számológép használatához. Nyissa meg a Visual Studiót és a számológépprojektet.

  1. A felhasználói felület elemeinek kiemelésekor és felolvasásakor a Narrátor először az AutomationProperites.Name tulajdonságot teszteli. Ha talál ilyet, azt a szót vagy kifejezést használja. Ha nem talál, helyette a Content tulajdonságot használja. A nem jól kiejtett felhasználói felületi elemek esetén tehát meg kell adnunk az AutomationProperites.Name tulajdonságot egy érthetően kimondható névvel. A MainPage.xaml fájlban adja hozzá az alábbi névtulajdonságokat a megfelelő xaml-bejegyzésekhez. Szánjon rá időt, mivel ez egy hosszú lista, a bejegyzéseket pedig egyenként kell felvennie. Másolja ki őket az alábbi listából, vagy használja a Visual Studio gyors attribútummegadási funkcióit.
 <Button x:Name="ButtonNMemoryPlus" AutomationProperties.Name="Memory plus" Content="M+"
 <Button x:Name="ButtonNMemoryMinus" AutomationProperties.Name="Memory minus" Content="M-"
 <Button x:Name="ButtonNMemoryMultiply" AutomationProperties.Name="Memory times" Content="M*"
 <Button x:Name="ButtonNMemoryDivide" AutomationProperties.Name="Memory divided by" Content="M/"
 <Button x:Name="ButtonLeft" AutomationProperties.Name="Open" Content="("
 <Button x:Name="ButtonSqrt" AutomationProperties.Name="Square root" Content="Sqrt"
 <Button x:Name="ButtonPow" AutomationProperties.Name="to the Power of" Content="^"
 <Button x:Name="ButtonPi" AutomationProperties.Name="Pi" Content="&#928;"
 <Button x:Name="ButtonRight" AutomationProperties.Name="Close" Content=")"
 <Button x:Name="ButtonArcsine" AutomationProperties.Name="Arc sine" Content="Asin"
 <Button x:Name="ButtonArccosine" AutomationProperties.Name="Arc cosine" Content="Acos"
 <Button x:Name="ButtonArctangent" AutomationProperties.Name="Arc tangent" Content="Atan"
 <Button x:Name="ButtonSin" AutomationProperties.Name="Sine" Content="Sin"
 <Button x:Name="ButtonCos" AutomationProperties.Name="Cosine" Content="Cos"
 <Button x:Name="ButtonTan" AutomationProperties.Name="Tangent" Content="Tan"
 <Button x:Name="ButtonNegative" AutomationProperties.Name="Negative" Content="-N"
 <Button x:Name="ButtonPlus" AutomationProperties.Name="plus" Content="+"
 <Button x:Name="ButtonMinus" AutomationProperties.Name="minus" Content="-"
 <Button x:Name="ButtonMultiply" AutomationProperties.Name="times" Content="*"
 <Button x:Name="ButtonDivide" AutomationProperties.Name="divided by" Content="/"
 <Button x:Name="ButtonEquals" AutomationProperties.Name="equals" Content="="
 <TextBox x:Name="TextDisplay" AutomationProperties.Name="Calculation"
 <Button x:Name="ButtonClr" AutomationProperties.Name="Clear" Content="Clr"
 <Button x:Name="ButtonDel" AutomationProperties.Name="Delete" Content="Del"
   />
  1. A következőkben foglalkozzunk az állandók rendezetlen listájával. Nyissa meg a MainPage.xaml.cs fájlt, és keresse meg a LoadConstants metódust.

  2. Cserélje az alábbira a sztringlistát. Ebben minden rövidítés helyett a teljes formát használjuk.

string[] initialConstants = {
                "Acceleration due to gravity = 9.80665",
                "Bars to pounds per square inch = 14.5037738",
                "Centimeters to inches = 0.393700787",
                "Degrees to radians = 0.0174532925",
                "Feet to meters = 0.3048",
                "Grams to ounces = 0.035273",
                "Inches to centimeters = 2.540",
                "Inches to millimeters = 25.4",
                "Kilograms to pounds = 2.20462262",
                "Kilometers to miles = 0.621371192",               
                "Liters to pints = 2.11337642",
                "Meters to feet= 3.2808",
                "Miles to kilometers = 1.609344",
                "Millimeters to inches = 0.0393700787",
                "Ounces to grams = 28.3495",
                "Pints to liters = 0.473176473",   
                "Pounds per square inch to bars = 0.0689475729",
                "Pounds to kilograms = 0.45359237",                            
                "Radians to degrees = 57.2957795",
                "Speed of light in meters per second = 299792458",
                "Speed of light in miles per second = 186282.397"
            };
  1. Most futtassa az alkalmazást, és kapcsolja be a narrálást. Az alaposság érdekében jelöljön ki minden matematikai függvényt, műveletet és állandót, hogy a Narrátor mindet felolvassa. Most már mind természetesnek és érthetőnek hat? Ha nem, javítsa a sztringeket, vagy adja hozzá, illetve módosítsa az AutomationProperites.Name tulajdonságot.

  2. Adjon meg egy zárójeleket és több matematikai függvényt tartalmazó számítást (nem számít, hogy matematikailag értelmezhetők-e), majd jelölje ki a szöveget. A javításhoz némi kódolásra lesz szükség.

A Narrátor segítése kóddal

A módosításoknak köszönhetően a Narrátor már remekül kezeli a felhasználói felület elemeit. Azonban előfordulnak olyan esetek, ahol egy kimondott üzenet segítene, az aktiváló esemény azonban nem egy UI-elem. Emellett a számítás kiejtését is szeretnénk fejleszteni. Az alábbiakban egy beszédszintetizátort adunk hozzá a hibaüzenetek kezelése érdekében, valamint kisebb kódmódosításokat a számítás kezeléséhez.

  1. Nyissa meg a MainPage.xaml.cs fájlt, és frissítse utasításokkal, hogy az alábbiakat tartalmazza.
using System.Threading.Tasks;
using Windows.Media.SpeechSynthesis;
using Windows.UI.Xaml.Automation;
  1. Adja hozzá a következőt a globális változók listájához.
        // Declare variables needed for speech output.
        SpeechSynthesizer speech;
        MediaElement mediaElement;
  1. Inicializálja ezeket a változókat a MainPage metódusban. Az eredménynek így kell kinéznie.
        public MainPage()
        {
            this.InitializeComponent();

            // Hide the error field.
            textError.Visibility = Visibility.Collapsed;

            LoadConstants();

            calculation = new ArrayList();
            backupCalculation = new ArrayList();

            mode = Emode.Calculate;

            // The objects for controlling and playing audio.
            speech = new SpeechSynthesizer();
            mediaElement = new MediaElement();
        }
  1. Célszerű hozzáadni egy kapcsolót vagy egyéb UI-elemet, hogy a felhasználó el tudja dönteni, szeretné-e a Narrátor segítségét kérni. A MainPage.xaml fájlban, közvetlenül a listConstants bejegyzés felett (az utolsó felhasználói felületi elem mellett) adja hozzá a következőt.
        <ToggleSwitch x:Name="ToggleNarration"
            Margin="551,407,0,0"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            Header="Narration help"
            IsOn="True" />

Megjegyzés:

Fontos, hogy ezek az elemek a megfelelő sorrendben szerepeljenek a XAML-fájlban. Ellenkező esetben helytelenül jelennek meg, ez a bejegyzés például az állandók között fog szerepelni.

  1. A MainPage.xaml.cs fájlban adjon meg egy SayAsync metódust, hogy kimondhasson bármilyen szövegsort. Figyelje meg az imént hozzáadott speech és a mediaElement változót, valamint hogy ez egy aszinkron művelet.
        private async Task SayAsync(string text)
        {
            // Narrate the given text if narration help is on.
            if (ToggleNarration.IsOn == true)
            {
                // Generate the audio stream from plain text.
                SpeechSynthesisStream stream = await speech.SynthesizeTextToStreamAsync(text);

                // Send the stream to the media object, then play it.
                mediaElement.SetSource(stream, stream.ContentType);
                mediaElement.Play();
            }
        }
  1. Most hívásokat kell adnunk a SayAsync metódushoz. Kezdje a CalculateAsync metódus catch blokkjával.
            catch
            {
                TextError.Visibility = Visibility.Visible;
                CopyCalculation(backupCalculation, calculation);
                await SayAsync("Oops, there is an error in your calculation.");
            }
  1. A CalculateAsync metódusban adja hozzá a következő hívást a SayAsync elemhez az itt látható sorok után.
                    // Add the entry to the next calculation, just in case the user wants to add to it.
                    OneEntry resultEntry = new OneEntry(Etoken.Number, result, txt);
                    calculation.Add((object)resultEntry);

                    await SayAsync($"The result is: {txt}");
  1. Keresse meg a Button_Click metódust, és módosítsa a kapcsolóblokk default: bejegyzését a következőre. Ez kimondhatóvá teszi a számítást.
                default:

                    // User has clicked a math or digit button.
                    string tag = b.Tag.ToString();
                    string txt = "";

                    // If in narrative mode, then use a full English string for the display text, if a full string has been specified.
                    if (ToggleNarration.IsOn == true)
                    {
                        txt = b.GetValue(AutomationProperties.NameProperty).ToString();
                    }

                    // Use the content of the button as the equation text.
                    if (txt.Length == 0)
                    {
                        txt = b.Content.ToString();
                    }

                    MathEntry(txt, tag);
                    break;
  1. Futtassa az alkalmazást a kód teszteléséhez. Gondoskodjon arról, hogy a Narrátor és a Narrátor súgójának váltógombja be van kapcsolva. Írjon be egy értelmetlen számítást (például Sqrt (, ami Square root Open kifejezésként jelenik meg). Az = kiválasztásakor természetes hangon hangzik el a hibaüzenet? Az SayAsync metódus és a Narrátor is ugyanezt a hangot használja, a hangélmény így zökkenőmentes marad.

  2. Fejezze be a számítást, és figyelje meg a megjelenő szöveget. Ha ekkor kijelöli a szöveget, a Narrátor érthetően felolvassa a számítást. Bizonyos műveletek így is kihívást jelenthetnek neki, de már így is jelentős mértékben akadálymentesebbé tettük a szolgáltatást.

Ha beszédszintézissel bővíti az alkalmazást, kitöltheti a narrálás esetleges hézagait, így tovább segítheti a felhasználókat. Ez nagy mértékben függ az alkalmazástól, így a prioritás a felhasználói felület elemeinek a Narrátorra való előkészítése kell, hogy legyen. Néha csak minimális mértékben kell fokozni a narrálást, ahogy az itt is történt.

Az egység összefoglalása

Ebben az egységben megtanultuk, hogy a beszédszintézis mára lenyűgöző minőséget nyújt, legalábbis korábbi verzióihoz képest. Megtudtuk, hogy a Windows legtöbb narrálási funkciója ingyenesen, a Narrátor bekapcsolásával elérhető. Azonban azt is megtudtuk, hogy az üzenetsztringek rendezetlensége problémát jelenthet a Narrátor használata során. Egy akadálymentes alkalmazáshoz meg kell győződnünk arról, hogy az üzenetsztringek érthetőek és alaposak.

Emellett láthattuk, hogy a Narrátor nem tökéletes, és bizonyos körülmények között nekünk kell elősegítenünk a feladatát. Egy olyan matematikai kifejezést például, mint a „sin”, nem tud megfelelően kimondani, mert a rövidített változat egy másik szót is jelent. XAML-beállításokkal azonban egyszerűen orvosolhatjuk ezt a problémát.