Example #1
0
        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);
        }
Example #2
0
        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();*/
            }
        }