C# la sintassi vocale con il Framework MAUI

Articolo di base alla gestione della sintesi vocale con il Framework 7 di MAUI.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

In questo articolo vedremo l’utilizzo della sintassi vocale tramite il Framework .Net 7 di MAUI, aggiungendo quindi alle nostre applicazioni la possibilità di effettuare voci, con il quale sentire il testo viene riprodotto.
La sintesi vocale, può tornare utile in quei contesti, in cui si vogliono dare avvisi o informazioni in maniera sonora, o aggiungere funzionalità particolare alla propria applicazione.
L’articolo fornirà le basi su come utilizzare tramite MAUI ed il linguaggio di programmazione C# questa funzionalità.

Creazione del progetto


Si crea un progetto di tipo MAUI, selezionando l’ultima versione del Framework, nel nostro caso la versione 7.
Una volta creato il progetto, nel file “AndroidManifest” dobbiamo aggiungere il tag, o meglio il nodo per abilitare sui SmartPhone la sintesi vocale.
Sotto al tag permission.Internet, aggiungere il seguente tag.

XML
<queries>
        <intent>
            <action android:name="android.intent.action.TTS_SERVICE" />
        </intent>
    </queries>

Di seguito si riporta il file AndroidManifest completo.

XML
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application android:allowBackup="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true"></application>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <queries>
        <intent>
            <action android:name="android.intent.action.TTS_SERVICE" />
        </intent>
    </queries>
</manifest>

Terminato di impostare i permessi per l’utilizzo della sintesi vocale, non resta che aggiungere nel file “MainPage.XAML” un pulsante.
Si seguito si riporta il frammento di codice per aggiungere un pulsante.

XAML
  <Button
               x:Name="BtnVoce"
               Text="Voce"
               SemanticProperties.Hint=""
               Clicked="BtnVoce_Clicked"
               HorizontalOptions="Center" />

Con queste operazioni abbiamo terminata la creazione del nostro progetto.

Stesura del codice


Terminata la creazione del progetto non resta che scrivere il codice per eseguire l’audio da un determinato testo.
Facciamo doppio click o digitiamo il pulsante “F7” della tastiera tenendo il puntatore del mouse nell’evento click del pulsante, in modo da passare in visualizzazione codice nell’evento del pulsante.
Sotto all’evento, scriviamo una funzione che verrà richiamata dall’evento click del pulsante, appena visualizzata, in questa funzione verrà eseguito il metodo “SpeakAsync “ della classe “TextToSpeech”.
Di seguito si riporta il codice del metodo per il linguaggio C#

C#
public async void Speak() =>
   await TextToSpeech.Default.SpeakAsync("Buongiorno");

Mentre di seguito il codice C# per richiamare la funzione nell’evento click del pulsante.

C#
private void BtnVoce_Clicked(object sender, EventArgs e)
   {
        Speak();
   }

A questo punto terminata la stesura del codice non resta che eseguire la nostra applicazione, sia in ambito mobile per Android, e sia per Windows application.
Nel caso che invece abbiamo la necessità di eseguire più frasi contemporaneamente, possiamo gestire le azioni in maniera asincrona attendendo il termine di ogni frase.
Di seguito, sempre per l’evento click del pulsante, viene illustrato un frammento di codice di come eseguire più frasi contemperamento.
Di seguito il codice nel linguaggio C# delle suddette operazioni.

C#
private void BtnVoce_Clicked(object sender, EventArgs e)
   {
       bool occupato = true;
       Task.WhenAll(
       TextToSpeech.Default.SpeakAsync("Buongiorno 1"),
       TextToSpeech.Default.SpeakAsync("Buongiorno 2"),
       TextToSpeech.Default.SpeakAsync("Buongiorno 3"))
       .ContinueWith((t) => { occupato = false; }, TaskScheduler.FromCurrentSynchronizationContext());
    }

Nell’eventualità invece che vogliamo applicare delle opzioni, per esempio il volume, oppure il timbro di voce maschile o femminile,  possiamo utilizzare la classe “SpeechOptions” che impostando le varie proprietà permette di eseguire la voce secondo le nostre esigenze.
Con il metodo “GetLocalesAsync” della classe “TextToSpeech” ottiene tutte le impostazioni che abbiamo installato nel dispositivo in cui viene eseguito il programma.

Di seguito si riporta la funzione “Parla” che sarà richiamata dall’evento click del pulsante, nel quale viene impostata la voce femminile.

C#
private async void Parla()
   {
       IEnumerable<Locale> setteggioLocale = await TextToSpeech.Default.GetLocalesAsync();
       SpeechOptions options = new SpeechOptions()
       {
           Pitch = 2.0f,   // 0.0 - 2.0
           Volume = 1.0f, // 0.0 - 1.0
           Locale = setteggioLocale.ToList()[1] //0 voce di uomo - 1 voce di donna
       };
       await TextToSpeech.Default.SpeakAsync("Buongiorno, benvenuti a bordo!", options);
   }

Conclusioni


L’articolo ha fornito al lettore le basi per utilizzare nelle proprie applicazioni la funzionalità audio, in particolare utilizzando la classe TextToSpeech, messa a disposizione dal Framework MAUI, dotiamo i nostri progetti di una voce. L’utilizzo di questa classe è molto semplice e con pochi accorgimenti diviene utilizzabili per diverse piattaforme, non solo Windows ma anche Android e Mac.