TOC

This article is currently in the process of being translated into Italian (~96% done).

Audio e Video:

Sintesi vocale (far parlare WPF)

Nelle librerie System.Speech, Microsoft ha aggiunto qualcosa di veramente interessante: la sintesi vocale ovvero la capacità di trasformare il testo in parole pronunciate e riconoscimento vocale, la capacità di tradurre le parole pronunciate in testo. Ci concentreremo sulla sintesi vocale in questo articolo e poi entreremo nel riconoscimento vocale in quello successivo.

Per trasformare il testo in parole parlate, useremo la classe SpeechSynthesizer. Questa classe risiede nella libreria System.Speech, che dovremo aggiungere nella nostra applicazione. A seconda della versione di Visual Studio utilizzata, il processo è simile al seguente:

Aggiungendo la libreria e mettendo l'opportuno namespace System.Speech.Synthesis ora possiamo usare la classe SpeechSynthesizer. Possiamo ora procedere con l'esempio "Ciao, mondo!" ispirato, questa volta a parole:

<Window x:Class="WpfTutorialSamples.Audio_and_Video.SpeechSynthesisSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="SpeechSynthesisSample" Height="150" Width="150">
    <Grid>
        <Button Name="btnSayIt" Click="btnSayHello_Click" VerticalAlignment="Center" HorizontalAlignment="Center">Say hello!</Button>
    </Grid>
</Window>
using System;
using System.Speech.Synthesis;
using System.Windows;

namespace WpfTutorialSamples.Audio_and_Video
{
	public partial class SpeechSynthesisSample : Window
	{
		public SpeechSynthesisSample()
		{
			InitializeComponent();
		}

		private void btnSayHello_Click(object sender, RoutedEventArgs e)
		{
			SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer();
			speechSynthesizer.Speak("Hello, world!");
		}
	}
}

Questo è molto semplice, e poiché lo screenshot non aiuta molto a dimostrare la sintesi vocale, ti suggerisco di provare tu stesso a costruire l'esempio, per sperimentarlo.

Controllo della pronuncia

SpeechSynthesizer può fare di più però. Attraverso l'uso della classe PromptBuilder, possiamo ottenere un controllo molto maggiore su come viene pronunciata una frase. Il prossimo esempio, che è un'estensione del primo esempio, illustrerà ciò:

<Window x:Class="WpfTutorialSamples.Audio_and_Video.SpeechSynthesisPromptBuilderSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="SpeechSynthesisPromptBuilderSample" Height="150" Width="150">
    <Grid>
        <Button Name="btnSayIt" Click="btnSayHello_Click" VerticalAlignment="Center" HorizontalAlignment="Center">Say hello!</Button>
    </Grid>
</Window>
using System;
using System.Speech.Synthesis;
using System.Windows;

namespace WpfTutorialSamples.Audio_and_Video
{
	public partial class SpeechSynthesisPromptBuilderSample : Window
	{
		public SpeechSynthesisPromptBuilderSample()
		{
			InitializeComponent();
		}

		private void btnSayHello_Click(object sender, RoutedEventArgs e)
		{
			PromptBuilder promptBuilder = new PromptBuilder();
			promptBuilder.AppendText("Hello world");

			PromptStyle promptStyle = new PromptStyle();
			promptStyle.Volume = PromptVolume.Soft;
			promptStyle.Rate = PromptRate.Slow;
			promptBuilder.StartStyle(promptStyle);
			promptBuilder.AppendText("and hello to the universe too.");
			promptBuilder.EndStyle();

			promptBuilder.AppendText("On this day, ");
			promptBuilder.AppendTextWithHint(DateTime.Now.ToShortDateString(), SayAs.Date);

			promptBuilder.AppendText(", we're gathered here to learn");
			promptBuilder.AppendText("all", PromptEmphasis.Strong);
			promptBuilder.AppendText("about");
			promptBuilder.AppendTextWithHint("WPF", SayAs.SpellOut);

			SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer();
			speechSynthesizer.Speak(promptBuilder);
		}
	}
}

Così diventa più interessante. Prova a eseguire l'esempio e vedi come funziona. Fornendo a SpeechSynthesizer qualcosa di più di una semplice stringa di testo, possiamo ottenere un grande controllo sul modo in cui vengono pronunciate le varie parti della frase. In questo caso, l'applicazione dirà quanto segue:

Hello world and hello to the universe too. On this day, <today's date>, we're gathered here to learn all about WPF.

Ora prova a inviarlo direttamente a SpeechSynthesizer e probabilmente ridaccherai un po' del risultato. Quello che facciamo invece è guidare il metodo Speak() su come usare le varie parti della frase. Prima di tutto, chiediamo a WPF di parlare anche "... and hello to the universe too" col volume più basso e un ritmo più lento, come se fosse sussurrato.

Per quanto riguarda la data, usiamo la speciale enumerazione SayAs per specificare che deve essere letta come una data effettiva e non solo un insieme di numeri, spazi e caratteri speciali.

Chiediamo anche che la parola "all" sia pronunciata con maggiore enfasi, per rendere la frase più dinamica, e alla fine, chiediamo che si faccia lo spelling della parola "WPF".

Tutto sommato, questo ci consente di rendere SpeechSynthesizer molto più facile da capire!

Summary

Far parlare la tua applicazione WPF è molto semplice e, usando la classe PromptBuilder, puoi persino avere un grande controllo sul modo in cui le tue parole vengono pronunciate. Questa è una funzionalità molto potente, ma potrebbe non essere rilevante per molte applicazioni odierne. È comunque molto interessante!

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!