This article shows to you , how to creating a Text-to-Speech application using VB.Net with Visual Studio 2008.
Introduction
.Net Framwork 3.5 provides set of speech libraries for developing a Text-to-Speech. The System.Speech.Synthesis namespace provides lot of classes for Text-to-Speech. Mainly InstalledVoice, VoiceInfo and SpeechSynthesizer etc..
Step by Step Procedures
Create a new project in Visual Studio 2008
Select the New Project from File Menu
- -> New Project window appears
- -> browse to other languagues
- -> select visual basic and windows application enter Name as TextToSpeechVB.
when the project is created you have to add a reference to the System.Speech.dll under .NET Tab.
Now design the windows form with the following controls
- ComboBox control(cmbInstalled) – to list all available installed voices
- Button Control(btnStart) – To starting the Text-to-Speech
- Button Control(btnEnd) – To stop the Text-to-Speech
- Track Bar control(btnRate) – to control the Text-to-Speech speed rate.
- Trach Bar Control( btnVolume)- to control the Text-to-Speech control volume.
The Speed rate should be a number between -10 and 10 values. A normal rate is -1 and the volum between 0 and 100.
So Assign the btnVolumn Trackbar control Minimum and Maximum properties to 0 and 100 and the btnRate trackbar control minimum and maximum properties to -10 and 10.
Default set to btnVolumn Value properties to 50 and btnRate value properties to -1.
Create a new instance of a SpeechSynthesizer under namespace System.Speech.Synthesis. This class have the properties and methods that can start, stop and control audio activites specified text. Need to add the Imports statements are
Imports System.Speech.SynthesisImports System.Collections.ObjectModeland declare the below line as private or public
Private p_objSynth As New SpeechSynthesizer
Next write a method which retrieves a list of installed voices are in local system. By default, Windows Xp available voices are (LH Michael(Gents voice),LH Michelle(Women voice),Microsoft sam(Gents voice)). This voice recognizes English words, punctuation and grammar rules. If you want to more voices , installed valid voices.
Dim objvoices As ReadOnlyCollection(Of InstalledVoice) = p_objSynth.GetInstalledVoices(Globalization.CultureInfo.CurrentCulture)
Now On_PageLoad event loads cmbInstalled combobox with installed voices
Dim objvoices As ReadOnlyCollection(Of InstalledVoice) = p_objSynth.GetInstalledVoices(Globalization.CultureInfo.CurrentCulture) Dim objvoiceInformation As VoiceInfo = objvoices(0).VoiceInfo For Each tmpvoice As InstalledVoice In objvoices objvoiceInformation = tmpvoice.VoiceInfo cmbInstalled.Items.Add(objvoiceInformation.Name.ToString) Next
Handle Volume and Speed Rate for SpeechSynthesizer
Volume
Write code for handle volume and speed rate changes,earlier mentioned above volume must be a number between 0 and 100. Mention number becomes the value for the Volume property of the active SpeechSynthesizer class instance.The user changes the position of the slider in the volumeTrackBar control to raised the valueChanged event
Private Sub btnVolume_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVolume.ValueChanged p_objSynth.Volume = btnVolume.Value End Sub
Speed Rate
To set the speed rate by assigning the rate property of the SpeechSynthesizer in ValueChanged event.
Private Sub btnRate_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRate.ValueChanged p_objSynth.Rate = btnRate.Value End Sub
Stop Speech
For stop speech write code in btnEnd button Event
mySynth.SpeakAsyncCancelAll() method to stop the Text-to-Speech.
Start Speech
Now Start the Text-to-Speech write code in btnStart button event
p_objSynth.SelectVoice(cmbInstalled.Text) p_objSynth.SpeakAsync(txtVoiceText.Text)
Complete Code Listing
Imports System.Speech.Synthesis Imports System.Collections.ObjectModel Public Class Form1 Private p_objSynth As New SpeechSynthesizer Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim objvoices As ReadOnlyCollection(Of InstalledVoice) = p_objSynth.GetInstalledVoices(Globalization.CultureInfo.CurrentCulture) Dim objvoiceInformation As VoiceInfo = objvoices(0).VoiceInfo For Each tmpvoice As InstalledVoice In objvoices objvoiceInformation = tmpvoice.VoiceInfo cmbInstalled.Items.Add(objvoiceInformation.Name.ToString) Next End Sub Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click p_objSynth.SelectVoice(cmbInstalled.Text) p_objSynth.SpeakAsync(txtVoiceText.Text) End Sub Private Sub btnVolume_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVolume.ValueChanged p_objSynth.Volume = btnVolume.Value End Sub Private Sub btnRate_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRate.ValueChanged p_objSynth.Rate = btnRate.Value End Sub Private Sub btnEnd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnd.Click p_objSynth.SpeakAsyncCancelAll() End Sub End Class