Hangleírások a Narrátorral
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
- Í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ő.
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.
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”).
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.
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.
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.
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.
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.
- 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="Π"
<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"
/>
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.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"
};
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.
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.
- 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;
- 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;
- 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();
}
- 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.
- 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();
}
}
- 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.");
}
- 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}");
- 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;
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.
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.