Нейронный голосовой аудиофайл Azure TTS создан неправильно размером в 1 байт

#azure #text-to-speech

#azure #преобразование текста в речь

Вопрос:

Стандартные голосовые аудиофайлы Azure TTS генерируются нормально. Однако для нейронного голоса аудиофайл генерируется ненормально размером в 1 байт. Код приведен ниже.

C # код

 public static async Task SynthesizeAudioAsync()
{
   var config = SpeechConfig.FromSubscription("xxxxxxxxxKey", "xxxxxxxRegion");
   using var synthesizer = new SpeechSynthesizer(config, null);

   var ssml = File.ReadAllText("C:/ssml.xml");
   var result = await synthesizer.SpeakSsmlAsync(ssml);

​   using var stream = AudioDataStream.FromResult(result);
   await stream.SaveToWaveFileAsync("C:/file.wav");
}
 

ssml.xml — Приведенный ниже файл, настроенный на стандартный голос, работает нормально.

 <speak version="1.0" xmlns="https://www.w3.org/2001/10/synthesis" xml:lang="en-US">
  <voice name="en-GB-George-Apollo">
    When you're on the motorway, it's a good idea to use a sat-nav.
  </voice>
</speak>
 

ssml.xml — Однако следующий набор файлов для neural voice не работает, и создается пустой файл источника звука.

 <speak version="1.0" xmlns="https://www.w3.org/2001/10/synthesis" xml:lang="en-US">
  <voice name="en-US-AriaNeural">
    When you're on the motorway, it's a good idea to use a sat-nav.
  </voice>
</speak>
 

Ответ №1:

Глядя на описанное вами поведение, из-за некоторых проблем служба речи не вернула ни одного аудиобайта.

Я проверил файл SSML на своем конце, он работает полностью нормально, т. Е. Проблем с SSML нет.

В качестве следующего шага к решению я бы рекомендовал вам добавить код обработки ошибок, чтобы лучше представить ошибку и предпринять соответствующие действия :

     var config = SpeechConfig.FromSubscription("xxxxxxxxxKey", "xxxxxxxRegion");
    using var synthesizer = new SpeechSynthesizer(config, null);

    var ssml = File.ReadAllText("C:/ssml.xml");
    var result = await synthesizer.SpeakSsmlAsync(ssml);
    if (result.Reason == ResultReason.Canceled)
    {
        var cancellation = SpeechSynthesisCancellationDetails.FromResult(result);
        Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");
        if (result.Reason == ResultReason.SynthesizingAudioCompleted)
        {
        Console.WriteLine ("No error ")
         using var stream = AudioDataStream.FromResult(result);
            await stream.SaveToWaveFileAsync("C:/file.wav");

        }

        else if (cancellation.Reason == CancellationReason.Error)
        {
            {
                Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
                Console.WriteLine($"CANCELED: ErrorDetails=[{cancellation.ErrorDetails}]");
                
            }
        }
 

Приведенная выше модификация предоставит дружественное сообщение об ошибке в консольном приложении.

Примечание: Если вы не используете консольное приложение, вам придется изменить код.

Пример вывода :

Это всего лишь пример вывода. ошибка, которую вы можете увидеть, будет другой. введите описание изображения здесь

Комментарии:

1. Решаемая благодаря хорошим советам. Я изменил область ресурсов на eastus, и она работала нормально.

2. Пожалуйста, рассмотрите возможность принятия этого решения, если оно помогло 🙂

3. meta.stackexchange.com/questions/5234/…