I decided to try out the Windows Phone 8 Speech API and expecting it to be quite complicated I had a pleasant surprise…
I created a new project and found that all the speech functionality is already in the SDK.
Below is a simple XAML screen to test out the functionality
<!--TitlePanel contains the name of the application and page title--> <StackPanel Grid.Row="0" Margin="12,17,0,28"> <TextBlock Text="VBMAGIC" Style="{StaticResource PhoneTextNormalStyle}"/> <TextBlock Text="speech toy" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> </StackPanel> <!--ContentPanel - place additional content here--> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <StackPanel> <TextBlock HorizontalAlignment="Center">Enter Text To Say</TextBlock> <TextBox x:Name="speechTextBox"></TextBox> <Button x:Name="sayitButton">Say It</Button> <Button x:Name="listenButton">Listen</Button> </StackPanel> </Grid>
And this is all the code I needed to actually handle everything.
Imports System Imports System.Threading Imports System.Windows.Controls Imports Microsoft.Phone.Controls Imports Microsoft.Phone.Shell Imports Windows.Phone.Speech.Synthesis Imports Windows.Phone.Speech.Recognition Partial Public Class MainPage Inherits PhoneApplicationPage Private _synth As New SpeechSynthesizer Private _recog As New SpeechRecognizerUI() ' Constructor Public Sub New() InitializeComponent() SupportedOrientations = SupportedPageOrientation.Portrait Or SupportedPageOrientation.Landscape End Sub Private Sub sayitButton_Click(sender As Object, e As RoutedEventArgs) Handles sayitButton.Click ' Says it all SayIt() End Sub Private Async Sub listenButton_Click(sender As Object, e As RoutedEventArgs) Handles listenButton.Click _recog.Settings.ReadoutEnabled = False _recog.Settings.ShowConfirmation = False ' Display the speech recognition dialogue Dim recoResult = Await _recog.RecognizeWithUIAsync() ' Put the text that comes back into the speechTextBlock ' and then say it. speechTextBox.Text = recoResult.RecognitionResult.Text SayIt() End Sub Private Async Sub SayIt() ' Speak the contents of the speechTextBox Await _synth.SpeakTextAsync(speechTextBox.Text) End Sub End Class
I switched off some of the default Speech Recognition UI features which were a bit of an overkill for this simple app (Look under _recog.Settings
for all settings)
To enable this functionality to work you need to modify the app manifest. On VB.net projects. Click the Show All Files icon in the Solution Explorer, Open the My Project Directory, Double click the WMAppManifest.xml file, Click the capabilities Tab and make sure that the following options are ticked.
- ID_CAP_MICROPHONE
- ID_CAP_NETWORKING
- ID_CAP_SPEECH_RECOGNITION
That is it. Nothing else required.
Leave a Reply