2017-01-13 6 views
0

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

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 ответ (исключений не выбрасывается), однако звуковой поток пуст:

Empty audio stream 1 Empty audio stream 2

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

ответ

1

Возвращенный 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(); 
     } 
    } 
} 
0

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

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

см., Если это трюк для вас.