private static UtteranceSynthesisRequest MakeRequest(string text, string model) { UtteranceSynthesisRequest utteranceRequest = new UtteranceSynthesisRequest { Model = model, Text = text, OutputAudioSpec = new AudioFormatOptions { /* RawAudio = new RawAudio * { * AudioEncoding = RawAudio.Types.AudioEncoding.Linear16Pcm, * SampleRateHertz = 22050 * }*/ ContainerAudio = new ContainerAudio { ContainerAudioType = ContainerAudio.Types.ContainerAudioType.Wav } } }; return(utteranceRequest); }
private async void SynthesizeTxtBuffer(string text, string model) { UtteranceSynthesisRequest request = MakeRequest(text, model); // request.Hints.Add(new Hints() { Voice = "kuznetsov_male" }); Metadata callHeaders = this.MakeMetadata(); callHeaders.Add("x-folder-id", this.FolderId); CancellationTokenSource cancellationSource = new CancellationTokenSource(); var call = synthesizerClient.UtteranceSynthesis(request, headers: callHeaders, deadline: DateTime.UtcNow.AddMinutes(5)); log.Information($"synthizing: {text}"); var respEnum = call.ResponseStream.ReadAllAsync(cancellationSource.Token).GetAsyncEnumerator(); try { ValueTaskAwaiter <bool> tsk = respEnum.MoveNextAsync().GetAwaiter(); tsk.OnCompleted(() => { if (respEnum.Current != null) { byte[] data = respEnum.Current.AudioChunk.Data.ToByteArray(); TextToSpeachResultsRecieved?.Invoke(this, AudioDataEventArgs.FromByateArray(data, data.Length)); log.Information($"Audio chunk {data.Length} bytes recieved."); } else { log.Warning("No data in response"); } }); while (!tsk.IsCompleted) { Thread.Sleep(200); } return; } catch (Exception ex) { log.Error(ex.Message); } finally { if (respEnum != null) { await respEnum.DisposeAsync(); } /* IAsyncEnumerator<UtteranceSynthesisResponse> respEnum = respEnumerable.GetAsyncEnumerator(); * * while (!respEnum.MoveNextAsync().GetAwaiter().IsCompleted) * { * Thread.Sleep(200); * } * * byte[] data = respEnum.Current.AudioChunk.Data.ToByteArray(); * TextToSpeachResultsRecieved?.Invoke(this, AudioDataEventArgs.FromByateArray(data, * data.Length)); * * await respEnum.DisposeAsync(); * call.Dispose();*/ } }