WebElektronika

Angol kiejtésgyakorló Windows Form-mal

person access_time 2015.10.05.
Elkészítünk most egy nagyon egyszerű projektet .NET4 környezetben, amelynek célja az angol kiejtés gyakorlása. Az angol szöveget felolvastatjuk a számítógéppel, ehhez felhasználjuk a SpeechSynthesizer osztályt. Nem használunk ebben a projektben aszinkron hívást, ezért a felolvasás alatt nem tudjuk a hangerőt változtatni, illetve a GUI is lemerevedik ezidő alatt. Később újra elővesszük ezt a projektötletünket, és akkor elegánsan fogjuk megvalósítani.


Indítsuk el a VS2012-t és hozzunk létre benne egy C# nyelvű Windows Form-os projektet (1. ábra).

kep
1. ábra   Projekt kiválasztása
 

Az ablak bezárása után egy üres form-ot kapunk, amelyre a Toolbox-ból vegyünk fel egy Buttont, egy RichTextBox-ot, egy TrackBar-t és két Label-t. ezeket rendezzük el a felületen, például a 2. ábrának megfelelően.

kep
2. ábra   Egy lehetséges design elrendezés
 

Ezután (vagy még előtte? :) ) módosíthatjuk a Form méretét úgy, hogy design nézetben jobb egérklikk után a Properties ablakot kiválasztjuk. Itt is tudjuk módosítani a Form-nak a különböző tulajdonságait, például a méreteit (3. ábra).

kep
3. ábra   A Form tulajdonságainak a megváltoztatása
 

Ezután írjuk át a Button osztályból létrejött button1 nevű nyomógomb nevét a Properties ablakban btnPlay-re (4. ábra)

kep
4. ábra  A button1 nyomógomb nevének megváltoztatása
 

Ahhoz, hogy egy string-et angol kiejtéssel a számítógépünk fel tudjon olvasni, szükséges a System.Speech névteret a projektünkhöz adni. A projekt nevére álljunk rá egérrel a Solution Explorer ablakban, majd jobb egérkattintás után az Add Reference-re kattintsunk. Ekkor az 5. ábrán látható ablakban keressük meg a System.Speech referenciát és jelöljük be.

kep
5. ábra   A System.Speech referencia hozzáadása a projekthez
 

Ezután már a SpeechSynthesizer osztályt tudjuk használni, példányosítani.

Módosítsuk a Form1 osztályt a következő példa szerint!

public partial class Form1 : Form
    {
        SpeechSynthesizer hang;

        public Form1()
        {
            InitializeComponent();
            Text = "Angol kiejtés";
            btnPlay.Text = "Play";
            trckBarVolume.Minimum = 0;
            trckBarVolume.Maximum = 100;
            trckBarVolume.TickFrequency = 10;
            label1.Text = "Hangerő : ";
            label2.Text = trckBarVolume.Value.ToString();

            trckBarVolume.ValueChanged += trckBarVolume_ValueChanged;
        }

        void trckBarVolume_ValueChanged(object sender, EventArgs e)
        {
            label2.Text = trckBarVolume.Value.ToString();
        }
        
        private void btnPlay_Click(object sender, EventArgs e)
        {
            hang = new SpeechSynthesizer();
            hang.SetOutputToDefaultAudioDevice();
            hang.Volume = trckBarVolume.Value;
            hang.Speak(richTextBox1.Text);
        }
    }

 

Most már nincs más hátra, mint indítsuk el a projektünket debug módban (F5) és a szövegdobozba írjunk be egy angol szöveget, illetve állítsuk be a hangerőt (6. ábra).

Ne feledjük, a lejátszás alatt nem tudjuk a Form-unkat arrébb tenni, illetve a hangerőt változtatni a szinkron hívás miatt.

kep
6. ábra   Projektünk debug módban (a felolvasandó tesztszöveg forrása : The Guardian)
 

Nem túl elegáns ez a megoldás a szinkron hívás miatt, ezért később újra elővesszük ezt a projektet és módosítani fogjuk igény szerint.