如何在 Azure Direct Line 语音机器人中使用神经语音

How to use neural voices in Azure Direct Line Speech bot

我正在尝试更新实验性 DirectLineSpeech Echo Bot sampleSpeak() 方法以使用神经语音,但它似乎不起作用。

这是我试图让它工作的代码 -

public IActivity Speak(string message)
{
    var activity = MessageFactory.Text(message);
    string body = @"<speak version='1.0' xmlns='https://www.w3.org/2001/10/synthesis' xml:lang='en-US'>
        <voice name='Microsoft Server Speech Text to Speech Voice (en-US, JessaNeural)'>
        <mstts:express-as type='chat'>" + $"{message}" + "</mstts:express-as></voice></speak>";
    activity.Speak = body;
    return activity;
}

这是基于 SSML Guide

中提供的建议

参考标准T2S:

public IActivity Speak(string message)
{
    var activity = MessageFactory.Text(message);
    string body = @"<speak version='1.0' xmlns='https://www.w3.org/2001/10/synthesis' xml:lang='en-US'>
        <voice name='Microsoft Server Speech Text to Speech Voice (en-US, JessaRUS)'>" +
        $"{message}" + "</voice></speak>";
    activity.Speak = body;
    return activity;
}

有人可以帮助我了解它是如何工作的或者我做错了什么吗?

如果它有助于找到任何限制,我已经在 westus2 区域的 F1 免费层中将机器人部署为应用程序服务。

编辑:更新代码以使用全名,即。 Microsoft Server Speech Text to Speech Voice (en-US, JessaNeural) 而不是 Nicholas 建议的短名称 en-US-JessaNeural。但这似乎也无济于事。

神经语音的确切名称是 Microsoft Server Speech Text to Speech Voice (en-US, JessaNeural)。但最主要的是你想使用一种说话风格,使用 mstts:express-as.

问题是您忘记在 xml (xmlns:mstts='https://www.w3.org/2001/mstts') 中添加声明 mstts 命名空间的块:

"<speak version='1.0' xmlns='https://www.w3.org/2001/10/synthesis' xml:lang='en-US'>
    <voice name='en-US-JessaNeural'>
        <mstts:express-as type='chat'>" + $"{message}" + "</mstts:express-as>
    </voice>
</speak>";

应该是:

"<speak version='1.0' xmlns='https://www.w3.org/2001/10/synthesis' xmlns:mstts='https://www.w3.org/2001/mstts' xml:lang='en-US'>
    <voice name='en-US-JessaNeural'>
        <mstts:express-as type='chat'>" + $"{message}" + "</mstts:express-as>
    </voice>
</speak>";