.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