Как использовать нейронные голоса в боте Azure Direct Line Speech

Я пытаюсь обновить экспериментальный Пример Speak() метода DirectLineSpeech Echo Bot для использования нейронных голосов, но, похоже, он не работает.

Вот код, который я пытаюсь заставить работать -

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

Вот стандартный 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;
}

Может ли кто-нибудь помочь мне понять, как это работает или что я делаю не так?

Если это поможет найти какие-либо ограничения, я развернул бота как службу приложений на уровне бесплатного пользования F1 в регионе westus2.

Изменить: обновлен код, чтобы использовать полное имя, т.е. Microsoft Server Speech Text to Speech Voice (en-US, JessaNeural) вместо краткого имени en-US-JessaNeural, как предложил Николас. Но это тоже не помогает.




Ответы (1)


Точное имя нейронного голоса 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>";
person Nicolas R    schedule 23.10.2019
comment
Я тоже пробовал это, но до сих пор не работает. Я использовал краткое имя голоса, которое также должно работать. - person bedtym; 23.10.2019
comment
Если это поможет, мой бот будет развернут как служба приложений на уровне бесплатного пользования и находится в регионе westus2. - person bedtym; 23.10.2019
comment
Приложение DLS Client Sample никогда не получает событие Connector_ActivityReceived после того, как речь была распознана, и я получаю это событие Connector_Recognized. - person bedtym; 23.10.2019
comment
Я постараюсь подробно изучить пример приложения, о котором вы говорите. - person Nicolas R; 25.10.2019
comment
Я успешно получил нейронный голос, когда реализовал его без поля mstts:express-as. С этим полем я не получил голосового вывода, и у меня было странное поведение на выходе, с эхо-ответом, за которым следовало приветственное сообщение - person Nicolas R; 25.10.2019
comment
Итак, я могу подтвердить, что он работает без пользовательского выражения, но не с ним, здесь может быть ошибка или несовместимость - person Nicolas R; 25.10.2019
comment
Ладно, я понял!! Получив такое поведение, я напрямую протестировал Neural Speech с помощью mstts:express-as, который указал мне на ошибку. Вы забыли добавить xmlns:mstts="https://www.w3.org/2001/mstts" в запрос на объявление пространства имен mstts. Ответ отредактирован, получайте удовольствие - person Nicolas R; 25.10.2019
comment
Потрясающие! Большое спасибо!! - person bedtym; 26.10.2019