【问题标题】:Azure TTS neural voice audio file is created abnormally in 1 byte sizeAzure TTS 神经语音音频文件以 1 字节大小异常创建
【发布时间】:2021-04-20 06:40:00
【问题描述】:

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 - 但是,以下为神经语音设置的文件不起作用,并创建了一个空的声源文件。

<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>

【问题讨论】:

    标签: azure text-to-speech


    【解决方案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}]");
                    
                }
            }
    

    上述修改将在控制台应用程序上提供友好的错误消息。

    注意:如果您不使用控制台应用程序,您将需要修改代码。

    示例输出:

    这只是一个示例输出。您可能看到的错误会有所不同。

    【讨论】:

    猜你喜欢
    • 2021-08-03
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多