#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. Пожалуйста, рассмотрите возможность принятия этого решения, если оно помогло 🙂