Το Speech API παρέχει COM αντικείμενα οπότε θα πρέπει να τα χειριστείς όπως οποιοδήποτε άλλο COM αντικείμενο. Όταν προσθέσεις το reference στο SAPI θα δημιουργηθούν οι κατάλληλες wrapper κλάσεις για τα αντικείμενα του SAPI μεταξύ των οποίων και του SpVoice. Το SpVoice έχει και το Word event το οποίο θα εμφανιστεί ως κανονικό .NET event, οπότε το χειρίζεσαι όπως κάθε event (δημιουργείς δηλαδή το κατάλληλο delegate ή αν βαριέσαι, πατάς tab και δημιουργείται αυτόματα). Το κείμενο στο TextBox το επιλέγεις με την Select. Για να εμφανιστεί όμως η επιλογή σου θα πρέπει το TextBox να έχει το focus και η εντολή Speak να έχει το SVSFlagsAsync. Διαφορετικά πρώτα προφέρεται το κείμενο και μετά σηκώνονται τα events. Ο κώδικας θα είναι κάπως έτσι:
...
using SpeechLib;
namespace SapiTest
{
public partial class Form1 : Form
{
SpVoice voice = new SpVoiceClass();
public Form1()
{
InitializeComponent();
voice.Word += new _ISpeechVoiceEvents_WordEventHandler(voice_Word);
}
private void button1_Click(object sender, EventArgs e)
{
voice.Speak(this.textBox1.Text,SpeechVoiceSpeakFlags.SVSFlagsAsync);
this.textBox1.Focus();
}
void voice_Word(int StreamNumber, object StreamPosition, int CharacterPosition, int Length)
{
this.textBox1.Select(CharacterPosition, Length);
}
}
}
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos