Получение нулевого байтового аудиопотока при преобразовании текста в речь Amazon Polly

Я пытаюсь выполнить преобразование текста в речь, используя Amazon Web Services Polly и AWS SDK для C#. Я попытался сделать очень простое преобразование:

AmazonPollyClient client = new AmazonPollyClient("secret", "secret", Amazon.RegionEndpoint.USEast1);
Amazon.Polly.Model.SynthesizeSpeechRequest request = new SynthesizeSpeechRequest();
request.OutputFormat = OutputFormat.Mp3;
request.Text = "This is my first conversion";
request.TextType = TextType.Text;
request.VoiceId = VoiceId.Nicole;
Amazon.Polly.Model.SynthesizeSpeechResponse response = client.SynthesizeSpeech(request);

Я получаю HTTP 200 OK ответ (без исключений), однако аудиопоток пуст:

Пустой аудиопоток 1 Пустой аудиопоток 2

Чего не хватает?

2 ответа

Решение

Возвращенный AudioStream не имеет длины, пока вы не прочитаете его где-нибудь, например, в файл:

using System;
using System.IO;
using Amazon;
using Amazon.Polly;
using Amazon.Polly.Model;
namespace AwsPollySO1
{
    class Program
    {
        public static void Main(string[] args)
        {
            AmazonPollyClient client = new AmazonPollyClient("yourID", "yourSecretKey", RegionEndpoint.USEast1);
            SynthesizeSpeechRequest request = new SynthesizeSpeechRequest();
            request.OutputFormat = OutputFormat.Mp3;
            request.Text = "This is my first conversion";
            request.TextType = TextType.Text;
            request.VoiceId = VoiceId.Nicole;
            SynthesizeSpeechResponse response = client.SynthesizeSpeech(request);
            Console.WriteLine("ContentType: " + response.ContentType);
            Console.WriteLine("RequestCharacters: " + response.RequestCharacters);
            FileStream destination = File.Open(@"c:\temp\myfirstconversion.mp3", FileMode.Create);
            response.AudioStream.CopyTo(destination);
            Console.WriteLine("Destination length: {0}", destination.Length.ToString());
            destination.Close();
            Console.Read();
        }
    }
}

Я верю, что все, что вам нужно сделать, это очистить поток перед сохранением (или даже увидеть длину)

response.AudioStream.CopyTo(destination);
destination.Flush();

посмотрим, поможет ли это вам.

Другие вопросы по тегам