Intro to SAPI
Ok, so what's this SAPI thinggy mibobby, you might be asking? Good question. SAPI is Microsoft's Spheech API. It handles both speech input and output (I intend to cover input later, speech recognition anyone?). In terms of output, SAPI has a TTS engine that uses a speech synthesiser to read text out in a synthesised voice. By default, this will come out of the computer's default audio device (though you have some control over this). As an aside, for anyone who's never come across a screen reader before, this is the same way as a screen reader will present elements on screen to its user.
A basic code example
Nothing too fancy here. Taken from a WPF project that has a label, a textbox and a button that triggers the only event in this code (readButton_Click). This also requires adding a reference to .NET's System.Speech library.
using System;
using System.Windows;
using System.Speech.Synthesis;
namespace SAPI_Synthe_Reader
{
///
/// Interaction logic for MainWindow.xaml
///
public partial class MainWindow : Window
{
SpeechSynthesizer synth;
public MainWindow()
{
InitializeComponent();
synth = new SpeechSynthesizer();
}
private void readButton_Click(object sender, RoutedEventArgs e)
{
try
{
synth.SpeakAsync(readBox.Text);
}
catch (Exception ex)
{
MessageBox.Show("Stuff went wrong!\n\n" + ex.Message, "Oops!", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
}
Told you it was nothing too fancy. As far as the actual method that does the work, there is a syncronous version of the method called Speak, but that will take over your program's thread of execution until speech is finished. In other words, things will look like they're going slow, though this may sometimes be necessary, it depends on your uses for it. There is interesting stuff you can do, but I won't go into it here, not for now anyway. I got sidetracked trying to make it sing like Kesha, don't ask why. But some of the properties of the SpeechSynthesiser object should help you along.
But what's the point?
Some possible uses of this include:
- Telephone based systems where something to read to the user is desirable
- Improving accessability by possibly having SAPI read out things that wouldn't be apparent without vision when they happen on screen
- Making audio games (if they're your gig). Try seeing audiogames.net to learn more. Please note that there are better ways to do this which I hope to go into later.
Those are just a few off the cuff examples. I'm sure there's more.
Well, now you can make your computer talk. Don't worry, we're still a long way from programming terminators here. For now...
Share and enjoy.
No comments:
Post a Comment
As always, feel free to leave a comment.