.NET e gestione messaggi vocali

Se in un applicativo può essere utile gestire dei messaggi vocali è possibile ricorre alle classi del Namespace System.Speech.Synthesis e in particolare alla classe SpeechSynthesizer di seguito un semplice esempio di codice per la gestione di un messaggio vocale:

Using speechSynthesizer As New System.Speech.Synthesis.SpeechSynthesizer

speechSynthesizer.SetOutputToDefaultAudioDevice()

speechSynthesizer.Speak(“Messaggio vocale di test!”)

End Using

Il metodo SetOutputToDefaultAudioDevice imposta l’output sul device audio di default, mentre il metodo Speak genera il messaggio vocale in modo sincrono, per quanto riguarda la voce verrà utilizzata la quella di default del sistema come riportato nelle note della proprietà Voice della classe SpeechSynthesizer

When you initialize a new SpeechSynthesizer, it uses the default system voice. To configure the SpeechSynthesizer object to use one of the installed speech synthesis voices, use the SelectVoice or SelectVoiceByHints method. To get information about which voices are installed, use the GetInstalledVoices method and the VoiceInfo class.

Di seguito un esempio di salvataggio su file wav del messaggio e di successiva lettura del messaggio dal file generato mediante l’utilizzo del metodo SetOutputToWaveFile e della classe SoundPlayer:

Using speechSynthesizer As New System.Speech.Synthesis.SpeechSynthesizer

Dim audioformat = New System.Speech.AudioFormat.SpeechAudioFormatInfo(32000,
System.Speech.AudioFormat.AudioBitsPerSample.Sixteen,
System.Speech.AudioFormat.AudioChannel.Stereo)

 

speechSynthesizer.SetOutputToWaveFile(“C:\test\message.wav”, audioformat)

 

Using player = New System.Media.SoundPlayer(“C:\test\message.wav”)

speechSynthesizer.Speak(“Messaggio vocale di test!”)
player.Play()

End Using

End Using

Di seguito un esempio per ottenere informazioni sulle voci installate sul sistema:

Using speechSynthesizer As New System.Speech.Synthesis.SpeechSynthesizer

Dim message = String.Format(“{0} voices ar installed on the system:”, speechSynthesizer.GetInstalledVoices().Count) & ControlChars.NewLine

For Each voice In speechSynthesizer.GetInstalledVoices()

message &= ControlChars.NewLine & String.Format(“- {0} Culture:{1}”, voice.VoiceInfo.Name, voice.VoiceInfo.Culture)

If speechSynthesizer.Voice.Id Is voice.VoiceInfo.Id Then

message &= ” [Default]”

End If

Next

 

MsgBox(message)

End Using

Su un Windows 10 Enterprise 2016 LTSB il precedente codice restituisce le seguenti informazioni:

2 voices ar installed on the system:

– Microsoft Elsa Desktop Culture:it-IT [Default]

– Microsoft Zira Desktop Culture:en-US