in src/CognitiveKioskUWP/MainPage.xaml.cs [352:440]
private async Task StartSpeechTranslation()
{
try
{
if (isTranslationListening || string.IsNullOrEmpty(settings.SpeechKey))
return;
isTranslationListening = true;
// Creates an instance of a speech factory with specified subscription key and service region.
// Replace with your own subscription key and service region (e.g., "westus").
var config = SpeechTranslationConfig.FromSubscription(settings.SpeechKey, settings.SpeechRegion);
config.SpeechRecognitionLanguage = "en-US";
translationStopRecognition = new TaskCompletionSource<int>();
Random rand = new Random();
string language = textLanguges.ElementAt(rand.Next(textLanguges.Keys.Count())).Key;
config.AddTargetLanguage(language);
using (var recognizer = new TranslationRecognizer(config))
{
// Subscribes to events.
recognizer.Recognizing += (s, e) =>
{
try
{
//Debug.WriteLine($"Message received {e.Result.Text}");
string languageLong = textLanguges[e.Result.Translations.First().Key];
UpdateTranslationUI($"English: {e.Result.Text}", $"{languageLong}: {e.Result.Translations.First().Value}");
}
catch (Exception)
{
// let it go
}
};
recognizer.Recognized += (s, e) =>
{
//Debug.WriteLine($"Message received {e.Result.Text}");
if (e.Result.Translations.Count() > 0)
{
string languageLong = textLanguges[e.Result.Translations.FirstOrDefault().Key];
UpdateTranslationFinalUI($"{e.Result.Text}", $"{e.Result.Translations.First().Value}");
}
};
recognizer.Canceled += (s, e) =>
{
//NotifyUser($"An error occurred. Please step in front of camera to reactivate.");
isTranslationListening = false;
translationStopRecognition.TrySetResult(0);
};
recognizer.SessionStopped += (s, e) =>
{
//NotifyUser($"\n Session event. Event: {e.EventType.ToString()}.");
// Stops recognition when session stop is detected.
//NotifyUser($"\nStop recognition.");
isTranslationListening = false;
translationStopRecognition.TrySetResult(0);
};
// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
await recognizer.StartContinuousRecognitionAsync().ConfigureAwait(false);
UpdateTranslationUI($"Warming Up Translation", "");
await Task.Delay(3500);
UpdateTranslationUI($"Say Hi!", "");
// Waits for completion.
// Use Task.WaitAny to keep the task rooted.
Task.WaitAny(new[] { translationStopRecognition.Task });
//NotifyUser($"Stopped listenint");
isTranslationListening = false;
// Stops recognition.
await recognizer.StopContinuousRecognitionAsync().ConfigureAwait(false);
}
}
catch (Exception ex)
{
// Exception caught let it go!
}
}