沃森对话+TTS

Watson Conversation+TTS

我正在尝试使用 Watson Conversation 服务和 Watson TTS 服务开发 Web 应用程序。对话输出被发送到 TTS 服务进行转换。我在 NodeRED 中执行此操作,并且我还在对话节点和分配有效负载的 TTS 节点之间放置了一个功能节点。部署后,我只得到会话对话聊天机器人,而不是我想的那样的演讲。请帮我弄清楚我错过了什么?

*PS:我正在使用 HTTP post 和 HTTP get。

这是在 HTML 页面上使用 Text to Speech 的示例流程的 link。以此为开端,并添加对话。

https://github.com/watson-developer-cloud/node-red-labs/tree/master/basic_examples/text_to_speech

我构建了一个有效的流程,您需要安装一个可以播放音频的节点。文本转语音节点实际上不播放任何声音。它创建一个音频文件。

  1. 进入节点红色编辑器右上角的汉堡包。寻找调色板管理器。寻找 node-red-contrib-play-audio 并安装它。我假设您已经 node-red-bluemix-nodes

  2. 您将需要一个节点来检索输入,我使用了一个注入节点进行测试。

  3. 将其连接到您的对话节点。双击它并输入工作区 ID。 (它在每个右上角三个点下的工作区上。将那个长字符串复制到您的节点中。我使用默认汽车教程。

  4. 将其连接到功能节点。然后,我必须将对话的响应从 msg.payload.output.text[0] 移动到 msg.payload,如下所示:

msg.payload = msg.payload.output.text[0]; return msg;

  1. 将其连接到文本到语音节点。填写任何凭据,选择一个声音并单击输出到 msg.payload。 如果您忘记这样做,那么音频节点将实际读取文本,而不是使用文本到语音节点的语音。音频节点的声音不是很大。

  2. 连接播放音频节点。

就是这样。你应该有一个工作的声音。

查看正在发生的事情的一个好方法是使用调试节点。这使您可以查看内容流向何处并放入函数以针对每个节点适当地重定向输出。

复制下面的代码并进入汉堡并从剪贴板导入到新流程。您将需要填写适当的密码和工作区 ID,但这显示了它是如何工作的。

[{
    "id": "b7b6d9fc.1997f8",
    "type": "tab",
    "label": "Flow 2"
}, {
    "id": "d0ed4492.045c18",
    "type": "inject",
    "z": "b7b6d9fc.1997f8",
    "name": "",
    "topic": "",
    "payload": "play the radio",
    "payloadType": "str",
    "repeat": "",
    "crontab": "",
    "once": false,
    "x": 159.5,
    "y": 122,
    "wires": [
        ["dc33249.3227bd8"]
    ]
}, {
    "id": "dc33249.3227bd8",
    "type": "watson-conversation-v1",
    "z": "b7b6d9fc.1997f8",
    "name": "",
    "workspaceid": "",
    "multiuser": false,
    "context": true,
    "default-endpoint": true,
    "service-endpoint": "https://gateway.watsonplatform.net/conversation/api",
    "x": 383.5,
    "y": 121,
    "wires": [
        ["d3c07b87.22f9c8"]
    ]
}, {
    "id": "711b8067.a1c7",
    "type": "debug",
    "z": "b7b6d9fc.1997f8",
    "name": "",
    "active": true,
    "console": "false",
    "complete": "true",
    "x": 751.5,
    "y": 200,
    "wires": []
}, {
    "id": "9826b891.eb02b8",
    "type": "watson-text-to-speech",
    "z": "b7b6d9fc.1997f8",
    "name": "",
    "lang": "en-US",
    "langhidden": "en-US",
    "langcustom": "NoCustomisationSetting",
    "langcustomhidden": "",
    "voice": "en-US_MichaelVoice",
    "voicehidden": "",
    "format": "audio/wav",
    "password": "",
    "payload-response": true,
    "default-endpoint": true,
    "service-endpoint": "https://stream.watsonplatform.net/text-to-speech/api",
    "x": 757.5,
    "y": 64,
    "wires": [
        ["ccf6f5a7.700508"]
    ]
}, {
    "id": "d3c07b87.22f9c8",
    "type": "function",
    "z": "b7b6d9fc.1997f8",
    "name": "",
    "func": "msg.payload = msg.payload.output.text[0];\nreturn msg;",
    "outputs": 1,
    "noerr": 0,
    "x": 561.5,
    "y": 120,
    "wires": [
        ["9826b891.eb02b8", "711b8067.a1c7"]
    ]
}, {
    "id": "ccf6f5a7.700508",
    "type": "play audio",
    "z": "b7b6d9fc.1997f8",
    "name": "",
    "voice": "0",
    "x": 963.5,
    "y": 64,
    "wires": []
}]

您需要提供有关问题的更多信息。

无论如何,我注意到的一件事是文本到语音生成一个 44khz 的音频文件。例如,如果您 运行 在本地 RPI 中使用一些 USB 加密狗,它可能无法播放,因为它默认支持 22Khz 音频。所以能不能在本地播放还得看硬件和声音是怎么配置的。