Пример #1
0
 private static void Form_GenerateSpeech(object sender, GenerateSpeechEventArgs e)
 {
     _ = Task.Run(async() =>
     {
         try
         {
             if (e.FileName is not null)
             {
                 var newStream = await client.GetAudioDataStreamAsync(e.Format, e.Text, e.Voice, e.RateChange, e.PitchChange)
                                 .ConfigureAwait(true);
                 SaveStream(newStream, e.FileName);
             }
             else if (!e.DecodeRequired)
             {
                 var newStream = await client.GetAudioDataStreamAsync(e.Format, e.Text, e.Voice, e.RateChange, e.PitchChange)
                                 .ConfigureAwait(true);
                 PlayStream(newStream);
             }
             else
             {
                 var newStream = await client.GetWaveAudioAsync(e.Format, e.Text, e.Voice, e.RateChange, e.PitchChange)
                                 .ConfigureAwait(true);
                 PlayStream(newStream);
             }
         }
         catch (Exception exp)
         {
             form.SetError(exp);
         }
     });
 }
Пример #2
0
        private static async Task PlayAudioAsync(string text, NAudioAudioDataDecoder audioDecoder, TextToSpeechClient ttsClient, Voice voice)
        {
            using var audioStream = await ttsClient
                                    .GetAudioDataStreamAsync(text, voice.ShortName)
                                    .ConfigureAwait(false);

            using var waveStream = audioDecoder.MakeDecodingStream(audioStream);
            var sr  = waveStream.WaveFormat.SampleRate;
            var bps = waveStream.WaveFormat.BitsPerSample;

            System.Console.Write($"{bps} * {sr} = {bps * sr}");
            //await Task.Yield();
            await PlayAsync(waveStream).ConfigureAwait(false);
        }