public BotSpeechClient(SynthesisProperties properties) { bingSpeech = new BingSpeech(); bingSpeech.OnAudioAvailable += Cortana_OnAudioAvailable; bingSpeech.OnError += Cortana_OnError; Properties = properties; Validate(properties); }
private void Validate(SynthesisProperties properties) { if (!string.IsNullOrEmpty(properties.VoiceName)) { if (!properties.VoiceName.Contains(properties.Locale)) { throw new Exception("Voicename has different Locale than the speech client"); } } }
/// <summary> /// Sends the specified text to be spoken to the TTS service and saves the response audio to a file. /// </summary> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>A Task</returns> internal Task Speak(Activity activity, CancellationToken cancellationToken, SynthesisProperties inputOptions) { var activityConverter = new ActivityConverter(inputOptions); client.DefaultRequestHeaders.Clear(); foreach (var header in inputOptions.GetHeaders()) { client.DefaultRequestHeaders.TryAddWithoutValidation(header.Key, header.Value); } var genderValue = inputOptions.Gender.ToString(); var request = new HttpRequestMessage(HttpMethod.Post, new Uri(inputOptions.SpeechUri)) { Content = new StringContent(activityConverter.ToSsml(activity)) }; var httpTask = client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken); Console.WriteLine("Response status code: [{0}]", httpTask.Result.StatusCode); var saveTask = httpTask.ContinueWith( async(responseMessage, token) => { try { if (responseMessage.IsCompleted && responseMessage.Result != null && responseMessage.Result.IsSuccessStatusCode) { var httpStream = await responseMessage.Result.Content.ReadAsStreamAsync().ConfigureAwait(false); AudioAvailable(new DataEventArgs <Stream>(httpStream)); } else { Error(new DataEventArgs <Exception>(new Exception(String.Format("Service returned {0}", responseMessage.Result.StatusCode)))); } } catch (Exception e) { Error(new DataEventArgs <Exception>(e.GetBaseException())); } finally { responseMessage.Dispose(); request.Dispose(); } }, TaskContinuationOptions.AttachedToParent, cancellationToken); return(saveTask); }
public ActivityConverter(SynthesisProperties properties) { this.properties = properties; }