文档

WebSocket协议说明

更新时间:

本文介绍如何使用智能语音交互流式文本WebSocket协议使用语音合成。如果您不希望引入阿里云智能语音交互产品SDK,或者目前提供的SDK不能满足您的要求,可以基于本文描述自行开发代码访问阿里语音服务。

前提条件

在使用WebSocket协议对接之前,请先阅读接口说明

鉴权

服务端通过临时Token进行鉴权,请求时需要在URL中携带Token参数,Token获取方式请参见获取Token概述。获取Token之后通过如下方式访问语音服务端。

访问类型

说明

URL

外网访问

所有服务器均可使用外网访问URL。

wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1?token=<your token>

上海ECS内网访问

使用阿里云上海ECS(即ECS地域为华东2(上海)),可使用内网访问URL。ECS的经典网络不能访问AnyTunnel,即不能在内网访问语音服务;如果希望使用AnyTunnel,需要创建专有网络在其内部访问。

说明
  • 使用内网访问方式,将不产生ECS实例的公网流量费用。

  • 关于ECS的网络类型请参见网络类型

ws://nls-gateway-cn-shanghai-internal.aliyuncs.com:80/ws/v1?token=<your token>

指令

请求指令用于控制语音识别任务的起止,标识任务边界,以JSON格式的Text Frame方式发送服务端请求,需要在Header中设置请求的基础信息。指令由Header和Payload两部分组成,其中Header部分为统一格式,不同指令的Payload部分格式各不相同。

1. Header格式说明

Header格式如下:

参数

类型

是否必选

说明

header

请求头

header.appkey

String

管控台创建的项目Appkey。

header.message_id

String

当次消息请求ID,随机生成32位唯一ID。

header.task_id

String

整个实时语音合成的会话ID,整个请求中需要保持一致,32位唯一ID。

header.namespace

String

访问的产品名称,固定为“FlowingSpeechSynthesizer”。

header.name

String

指令名称,包含StartSynthesis和StopSynthesis指令。

2. StartSynthesis指令

参数

类型

是否必选

说明

payload.voice

String

发音人,默认是xiaoyun。发音人,默认是xiaoyun。

payload.format

String

音频编码格式,支持pcm、wav和mp3格式,默认值:pcm。音频编码格式,支持pcm、wav和mp3格式,默认值:pcm。

payload.sample_rate

Integer

音频采样率,默认值:16000Hz。

payload.volume

Integer

音量,取值范围:0~100。默认值:50。

payload.speech_rate

Integer

语速,取值范围:-500~500,默认值:0。

[-500,0,500]对应的语速倍速区间为 [0.5,1.0,2.0]。

payload.pitch_rate

Integer

语调,取值范围:-500~500,默认值:0。

payload.enable_subtitle

Boolean

开启字级别时间戳。

payload.enable_phoneme_timestamp

Boolean

开启音素级别时间戳。

{
    "header": {
        "message_id": "05450bf69c53413f8d88aed1ee60****",
        "task_id": "640bc797bb684bd6960185651307****",
        "namespace": "FlowingSpeechSynthesizer",
        "name": "StartSynthesis",
        "appkey": "17d4c634****"
    },
    "payload": {
        "voice": "xiaoyun",
        "format": "wav",
        "sample_rate": 16000,
        "volume": 50,
        "speech_rate": 0,
        "pitch_rate": 0,
        "enable_subtitle": true
    }
}

3. RunSynthesis指令

参数

类型

是否必选

说明

text

String

需要合成的文本

{
    "header": {
        "message_id": "05450bf69c53413f8d88aed1ee60****",
        "task_id": "640bc797bb684bd6960185651307****",
        "namespace": "FlowingSpeechSynthesizer",
        "name": "RunSynthesis",
        "appkey": "17d4c634****"
    },
    "payload": {
        "text": "流式输入文本"
    }
}

4. StopSynthesis指令

StopSynthesis指令要求服务端停止语音合成,Payload为空。示例代码如下:

{
    "header": {
        "message_id": "05450bf69c53413f8d88aed1ee60****",
        "task_id": "640bc797bb684bd6960185651307****",
        "namespace": "FlowingSpeechSynthesizer",
        "name": "StopSynthesis",
        "appkey": "17d4c634****"
    }
}

事件

事件指的是服务端返回给客户端的处理进度事件,代表不同的处理阶段,客户端可获取不同处理阶段的事件实现不同的业务逻辑。以JSON格式返回,事件由Header和Payload两部分组成,其中Header部分为统一格式,不同事件的Payload部分格式可能不同。

1. SynthesisStarted事件

参数

类型

说明

session_id

String

客户端请求时传入session_id的话则原样返回,否则由服务端自动生成32位唯一ID。

{
    "header": {
        "message_id": "05450bf69c53413f8d88aed1ee60****",
        "task_id": "640bc797bb684bd6960185651307****",
        "namespace": "FlowingSpeechSynthesizer",
        "name": "SynthesisStarted",
        "status": 20000000,
        "status_message": "GATEWAY|SUCCESS|Success."
    },
    "payload": {
        "session_id": "1231231dfdf****"
    }

2. SentenceBegin事件

SentenceBegin事件表示服务端检测到了一句话的开始。

参数

类型

说明

index

Integer

句子编号,从1开始递增。

{
    "header": {
        "message_id": "05450bf69c53413f8d88aed1ee60****",
        "task_id": "640bc797bb684bd6960185651307****",
        "namespace": "FlowingSpeechSynthesizer",
        "name": "SentenceBegin",
        "status": 20000000,
        "status_message": "GATEWAY|SUCCESS|Success."
    },
    "payload": {
        "index": 1
    }
}

3. SentenceSynthesis事件

SentenceSynthesis事件表示有新的合成结果返回,包含最新的音频和时间戳,句内全量,句间增量。

参数

类型

说明

subtitles[]

ArrayList

时间戳信息。

subtitles[0].text

String

⽂本信息。

subtitles[0].sentence

String

句子时间戳控制,True表示当前时间戳为句子。

subtitles[0].begin_index

Integer

该字在整句中的开始位置,从0开始。

subtitles[0].end_index

Integer

该字在整句中的结束位置,从0开始。

subtitles[0].begin_time

Integer

⽂本对应TTS语⾳开始时间戳,单位ms。

subtitles[0].end_time

Integer

⽂本对应TTS语⾳结束时间戳,单位ms。

subtitles[0].phoneme_list

ArrayList

文本的音素时间戳信息。

subtitles[0].phoneme_list[0].index

Integer

该音素的下标,从0开始。

subtitles[0].phoneme_list[0].beginTime

Integer

该音素对应TTS语音开始时间戳,单位ms。

subtitles[0].phoneme_list[0].endTime

Integer

该音素对应TTS语音结束时间戳,单位ms。

subtitles[0].phoneme_list[0].phoneme

String

音素信息。

subtitles[0].phoneme_list[0].tone

String

语气信息。

{
    "header": {
        "message_id": "05450bf69c53413f8d88aed1ee60****",
        "task_id": "640bc797bb684bd6960185651307****",
        "namespace": "FlowingSpeechSynthesizer",
        "name": "SentenceSynthesis",
        "status": 20000000,
        "status_message": "GATEWAY|SUCCESS|Success."
    },
    "payload": {
        "subtitles": [
            {
                "text": "",
                "begin_time": 0,
                "end_time": 0,
                "begin_index": 0,
                "end_index": 1,
                "sentence": true,
                "phoneme_list": []
            },
            {
                "text": "今",
                "begin_time": 0,
                "end_time": 175,
                "begin_index": 0,
                "end_index": 1,
                "sentence": false,
                "phoneme_list": [
                    {
                        "begin_time": 0,
                        "end_time": 120,
                        "text": "j_c",
                        "tone": "1"
                    },
                    {
                        "begin_time": 120,
                        "end_time": 170,
                        "text": "in_c",
                        "tone": "1"
                    }
                ]
            }
        ]
    }
}

4. SentenceEnd事件

SentenceEnd事件表示服务端检测到了一句话的结束,返回该句的全量时间戳。

参数

类型

说明

subtitles[]

ArrayList

时间戳信息。

subtitles[0].text

String

⽂本信息。

subtitles[0].sentence

String

句子时间戳控制,True表示当前时间戳为句子。

subtitles[0].begin_index

Integer

该字在整句中的开始位置,从0开始。

subtitles[0].end_index

Integer

该字在整句中的结束位置,从0开始。

subtitles[0].begin_time

Integer

⽂本对应TTS语⾳开始时间戳,单位ms。

subtitles[0].end_time

Integer

⽂本对应TTS语⾳结束时间戳,单位ms。

subtitles[0].phoneme_list

ArrayList

文本的音素时间戳信息。

subtitles[0].phoneme_list[0].index

Integer

该音素的下标,从0开始。

subtitles[0].phoneme_list[0].beginTime

Integer

该音素对应TTS语音开始时间戳,单位ms。

subtitles[0].phoneme_list[0].endTime

Integer

该音素对应TTS语音结束时间戳,单位ms。

subtitles[0].phoneme_list[0].phoneme

String

音素信息。

subtitles[0].phoneme_list[0].tone

String

语气信息。

{
    "header": {
        "message_id": "05450bf69c53413f8d88aed1ee60****",
        "task_id": "640bc797bb684bd6960185651307****",
        "namespace": "FlowingSpeechSynthesizer",
        "name": "SentenceEnd",
        "status": 20000000,
        "status_message": "GATEWAY|SUCCESS|Success."
    },
    "payload": {
        "subtitles": [
            {
                "text": "",
                "begin_time": 0,
                "end_time": 0,
                "begin_index": 0,
                "end_index": 1,
                "sentence": true,
                "phoneme_list": []
            },
            {
                "text": "今",
                "begin_time": 0,
                "end_time": 175,
                "begin_index": 0,
                "end_index": 1,
                "sentence": false,
                "phoneme_list": [
                    {
                        "begin_time": 0,
                        "end_time": 120,
                        "text": "j_c",
                        "tone": "1"
                    },
                    {
                        "begin_time": 120,
                        "end_time": 170,
                        "text": "in_c",
                        "tone": "1"
                    }
                ]
            },
            {
                "text": "天",
                "begin_time": 175,
                "end_time": 320,
                "begin_index": 1,
                "end_index": 2,
                "sentence": false,
                "phoneme_list": [
                    {
                        "begin_time": 0,
                        "end_time": 120,
                        "text": "t_c",
                        "tone": "1"
                    },
                    {
                        "begin_time": 120,
                        "end_time": 170,
                        "text": "ian_c",
                        "tone": "1"
                    }
                ]
            }
        ]
    }
}

5. SynthesisCompleted事件

SynthesisCompleted事件表示服务端已停止了语音转写。

{
    "header": {
        "message_id": "05450bf69c53413f8d88aed1ee60****",
        "task_id": "640bc797bb684bd6960185651307****",
        "namespace": "FlowingSpeechSynthesizer",
        "name": "SynthesisCompleted",
        "status": 20000000,
        "status_message": "GATEWAY|SUCCESS|Success."
    }
}

  • 本页导读 (1)