华为云用户手册

  • 请求参数 请求类为RttsRequest,详见表 RttsRequest。 表2 RttsRequest 参数名称 是否必选 参数类型 描述 text 是 String 待合成文本,不超过500字。 通过set方法可以设置具体参数,详见表 RttsRequest设置参数 表3 RttsRequest设置参数 方法名称 是否必选 参数类型 描述 SetAudioFormat 否 String 设置语音格式,默认pcm。 SetAudioProperty 否 String 设置 语音合成 特征字符串,{language}_{speaker}_{domain},即“语种_人员标识_领域”。默认chinese_xiaoyan_common 。详见API文档。 SetSampleRate 否 String 设置采样率:8000、16000,默认8000。 SetPitch 否 Integer 设置音高,-500~500,默认0。 SetVolume 否 Integer 设置音量,0~100,默认50。 SetSpeed 否 Integer 设置语速,-500~500,默认0。
  • SDK列表 在开始使用之前,请确保您安装的是最新版本的SDK。使用过时的版本可能会导致兼容性问题或无法使用最新功能。您可以在 SDK中心 查询版本信息。 表1提供了huaweicloud-sdk-php-v3SIS服务支持的SDK列表,您可以在GitHub仓库查看SDK更新历史、获取安装包以及查看指导文档。 表1 SDK列表 编程语言 Github地址 参考文档 Java huaweicloud-sdk-java-v3 Java SDK使用指导 Python huaweicloud-sdk-python-v3 Python SDK使用指导 C++ huaweicloud-sdk-cpp-v3 C++ SDK使用指导 .NETet huaweicloud-sdk-net-v3 .NET SDK使用指导 Go huaweicloud-sdk-go-v3 Go SDK使用指导 NodeJs huaweicloud-sdk-nodejs-v3 NodeJs SDK使用指导 PHP huaweicloud-sdk-php-v3 PHP SDK使用指导
  • 请求参数 请求类为SasrWsRequest,其中参数详见下表 表7 SasrWsRequest 参数名称 是否必选 参数类型 描述 command 是 String 需设置为START,表示开始识别请求;发送END,表示识别结束请求。 config 是 Object 配置信息,详见下表。 表8 Config 参数名称 是否必选 参数类型 描述 audioFormat 是 String 音频格式,支持pcm,alaw,ulaw等,如pcm8k16bit,具体规格请参见《API参考》中开始识别章节。 property 是 String 属性字符串,language_sampleRate_domain, 如chinese_8k_common。 addPunc 否 String 表示是否在识别结果中添加标点,取值为yes 、 no,默认no。 digitNorm 否 String 表示是否将语音中的数字识别为阿拉伯数字,取值为yes 、 no,默认为yes。 intermediateResult 否 String 是否显示中间结果,yes 或 no,默认no。 vocabularyId 否 String 热词表id,若没有则不填。 needWordInfo 否 String 表示是否在识别结果中输出分词结果信息,取值为“yes”和“no”,默认为“no”。
  • 初始化Client 初始化SasrWsClient,其中参数包含AuthInfo,SisHttpConfig,SasrWsResponseListener,SasrWsConnProcessListener。 表1 SasrWsClient 参数 是否必选 参数类型 描述 AuthInfo 是 Object 鉴权信息类。 SisHttpConfig 是 Object 连接时网络的配置类。 SasrWsResponseListener 是 Object webSocket回调过程中,业务逻辑的Listener。 SasrWsConnProcessListener 否 Object webSocket生命周期的Listener。 其中AuthInfo和SisHttpConfig的参数如下表所示 表2 AuthInfo 参数名称 是否必选 参数类型 描述 ak 是 String 用户的ak,可参考AK/SK认证。 sk 是 String 用户的sk,可参考AK/SK认证。 serviceRegion 是 String 区域,如cn-north-4,参考终端节点。 projectId 是 String 项目ID,同region一一对应,参考获取项目ID。 serviceEndPoint 否 String 终端节点,参考地区和终端节点。 表3 SisHttpConfig 参数名称 是否必选 参数类型 描述 connectionTimeout 否 Integer 连接超时,默认10000,单位ms。 readTimeout 否 Integer 读取超时,默认10000,单位ms。 websocketWaitTimeout 否 Integer webSocket返回数据时等待时间,默认20000,单位毫秒。 ProxyHostInfo 否 ProxyHostInfo 代理类。 表4 ProxyHostInfo 参数名称 是否必选 参数类型 描述 userName 否 String 代理用户名(例:test)。 passWord 否 String 代理密码(例:test)。 hostName 否 String 代理地址(例:“proxy.huaweicloud.com”)。 port 否 int 代理端口号(例:8080)。 表5 SasrWsResponseListener 函数 描述 void onExceededAudio(); 识别时长超过一分钟时,响应,后续录入音频不在识别。 void onResponseError(AsrResponse response); 识别过程中出现异常,调用。 void onResponseEnd(AsrResponse response); 识别结束时回调。 void onResponseBegin(AsrResponse response); 识别开始时回调。 void onResponseMessage(AsrResponse message); 返回识别的结果。 表6 SasrWsConnProcessListener 函数 描述 void onTranscriptionConnect() webSocket连接建立后回调。 void onTranscriptionClose(); webSocket连接关闭后回调 void onTranscriptionFail(AsrResponse var1); webSocket长连接连接失败是回调。
  • 请求参数 请求类为AsrCustomLongRequest,详见表3。 表3 AsrCustomLongRequest 参数名称 是否必选 参数类型 描述 data_url 是 String 存放录音文件地址: 推荐使用华为云OBS:授权配置请参见OBS配置。 您也可以把录音文件放在自行搭建服务器上,提供下载文件的地址。URL不能使用IP地址,只能使用 域名 ,请尽量避免中文 audio_format 是 String 音频格式,具体信息请参见《API参考》中录音文件识别章节。 model_property 是 String 属性字符串,语言_采样率_模型,如chinese_8k_common。具体信息请参见《API参考》中录音文件识别章节。 add_punc 否 String 表示是否在识别结果中添加标点,取值为yes 、 no,默认no。 digit_norm 否 String 表示是否将语音中的数字识别为阿拉伯数字,取值为yes 、 no,默认为yes。 need_analysis_info 否 Boolean 是否选择分析信息。 如果选择false,则声道、话者分离、情绪检测、速度信息均无效。默认false。 diarization 否 Boolean 是否需要话者分离,表示识别结果会包含role项,默认true。 channel 否 String 语音文件声道信息,可以为MONO(缺省), LEFT_AGENT, RIGHT_AGENT。默认MONO。 emotion 否 Boolean 是否需要做情绪检测,默认true。 speed 否 Boolean 是否需要输出语速信息,默认true。 vocabulary_id 否 String 热词表id,不使用则不填写。 创建热词表请参考《API参考》中创建热词表章节。 word_info 否 Array of objects 分词信息列表。
  • 响应参数 Python SDK响应结果为Json格式,详见表4。调用失败处理方法请参见错误码。 表4 响应结果 参数名称 是否必选 参数类型 描述 status 否 String 当前识别状态。具体状态如下所示: WAITING 等待识别。 FINISHED 识别已经完成。 ERROR 识别过程中发生错误。 create_time 否 String 任务创建时间, 遵循 RFC 3339格式。 格式示例:2018-12-04T13:10:29.310Z。 start_time 否 String 开始识别时间, 遵循 RFC 3339格式。 当status为FINISHED或ERROR时存在。 格式示例:2018-12-04T13:10:29.310Z。 finish_time 否 String 识别完成时间, 遵循 RFC 3339格式。 当status为FINISHED或ERROR时存在。 格式示例:2018-12-04T13:10:29.310Z。 audio_duration 否 Integer 提交音频时长,单位ms。 segments 否 Array of objects 识别结果, 多句结果的数组。 数据结构参见表5。 表5 Segment 参数名 是否必选 参数类型 说明 start_time 是 Integer 一句的起始时间戳,单位ms。 end_time 是 Integer 一句的结束时间戳,单位ms。 result 是 Object 调用成功表示识别结果,调用失败时无此字段。详见表6。 表6 Result 参数名 是否必选 参数类型 说明 text 是 String 识别结果文本。 analysis_info 否 Object 每一句的质检分析结果对象。 仅在识别配置中的need_analysis_info不为null时存在该返回结果。详见表7。 word_info 否 Array of Object 分词输出列表。 表7 Analysis_info 参数名 是否必选 参数类型 说明 role 否 String 角色类型,目前仅支持 AGENT(座席),USER(用户)。 emotion 否 String 情绪类型,目前仅支持NORMAL(正常),ANGRY(愤怒)。 在识别配置中emotion为true时存在。 speed 否 Float 语速信息,单位是"每秒字数"。 在识别配置中speed为true时存在。 表8 Word_info 数据结构 参数名 是否必选 参数类型 说明 start_time 否 Integer 起始时间 end_time 否 Integer 结束时间 word 否 String 分词
  • 初始化Client 初始化AsrCustomizationClient详见表 AsrCustomizationClient初始化参数。 表1 AsrCustomizationClient初始化参数 参数名称 是否必选 参数类型 描述 ak 是 String 用户的ak,可参考AK/SK认证。 sk 是 String 用户的sk,可参考AK/SK认证。 region 是 String 区域,如:cn-north-4。具体请参考终端节点。 project_id 是 String 项目ID,同region一一对应,参考获取项目ID。 service_endpoint 否 String 终端节点,一般使用默认即可。 sis_config 否 Object 详见表2。 表2 SisConfig 参数名称 是否必选 参数类型 描述 connect_timeout 否 Integer 连接超时,默认10,单位s。 read_timeout 否 Integer 读取超时,默认10,单位s。 proxy 否 List [host, port] 或 [host, port, username, password]。
  • 请求参数 请求类为RttsRequest,其中参数包含text,command,Config,详见表5。 表5 RttsRequest 参数名称 是否必选 参数类型 描述 text 是 String 待合成的文本,文本长度限制小于500字符。 command 是 String 需设置为START,表示开始识别请求。 Config 是 String 配置信息。可参照表6。 表6 Config 参数名称 是否必选 参数类型 描述 audio_format 否 String 待合成的音频格式,可选mp3,wav等,默认wav。具体信息请参见《API参考》中语音合成章节。 pitch 否 Integer 音高,[-500,500] ,默认是0。 speed 否 Integer 语速,[-500,500] ,默认是0。 volume 否 Integer 音量,[0,100],默认是50。 sample_rate 否 String 采样率,支持“8000”、“16000”,默认“8000”。 property 否 String 特征字符串,{language}_{speaker}_{domain},默认chinese_xiaoqi_common。具体信息请参见《API参考》中语音合成章节。
  • 代码示例 如下示例仅供参考,最新代码请前往SDK(websocket)章节获取并运行。 /* * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved. */ package com.huaweicloud.sis.android.demo.tts; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import com.cloud.sdk.util.StringUtils; import com.huaweicloud.sdk.core.utils.JsonUtils; import com.huaweicloud.sis.android.demo.R; import com.huaweicloud.sis.android.demo.service.AudioTrackService; import com.huaweicloud.sis.android.demo.Config; import com.huaweicloud.sis.android.demo.service.AudioTrackServiceCallback; import sis.android.sdk.RttsClient; import sis.android.sdk.bean.AuthInfo; import sis.android.sdk.bean.SisHttpConfig; import sis.android.sdk.bean.request.RttsRequest; import sis.android.sdk.bean.response.RttsResponse; import sis.android.sdk.exception.SisException; import sis.android.sdk.listeners.RttsResponseListener; /** * 功能描述 * 语音合成 websocket * * @since 2022-07-18 */ public class RttsActivity extends AppCompatActivity { private EditText textView; private Button startPlay; private RttsClient rttsClient; private SisHttpConfig sisHttpConfig; private AudioTrackService audioTrackService; private AudioTrackServiceCallback audioPlayerCallback; private AuthInfo authInfo; private static int dataAcceptanceTime = 1000 * 60 * 5; private RttsResponseListener rttsResponseListener = new RttsResponseListener() { @Override public void onTranscriptionConnect() { Log.i("info", "建立连接后回调"); } @Override public void onTranscriptionClose() { Log.i("info", "关闭连接后回调"); } @Override public void onTranscriptionFail(RttsResponse response) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "出现异常" + JsonUtils.toJSON(response), Toast.LENGTH_SHORT).show(); } }); updateButtonState(startPlay, true); Log.i("info", "长连接失败后回调" + JsonUtils.toJSON(response)); } @Override public void onTranscriptionBegin(RttsResponse response) { Log.i("info", "开始合成时的响应事件" + response.toString()); } @Override public void onTranscriptionEnd(RttsResponse response) { rttsClient.close(); audioTrackService.setPlayState(AudioTrackService.PlayState.playEnd); } @Override public void onTranscriptionError(RttsResponse response) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "出现异常" + JsonUtils.toJSON(response), Toast.LENGTH_SHORT).show(); } }); updateButtonState(startPlay, true); Log.i("info", "合成时发生错误的响应事件" + response.toString()); } @Override public void onTranscriptionResponse(byte[] bytes) { Log.i("info", "合成过程中返回的二进制流"); audioTrackService.setAudioData(bytes); } }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.rtts); } @Override protected void onStart() { super.onStart(); initView(); initResources(); } @Override protected void onDestroy() { super.onDestroy(); if (audioTrackService != null) { audioTrackService.stop(); audioTrackService.releaseTrack(); } } /** * 初始化UI */ private void initView() { textView = findViewById(R.id.itext); startPlay = findViewById(R.id.startplay); startPlay.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { updateButtonState(startPlay, false); new Thread(new Runnable() { @Override public void run() { try { audioTrackService.play(); rttsClient = new RttsClient(authInfo, sisHttpConfig, rttsResponseListener); RttsRequest rttsRequest = rttsRequets(); rttsClient.connect(); rttsClient.sendData(rttsRequest); } catch (SisException e) { Log.e("error", e.getErrorCode() + e.getErrorMsg()); } } }).start(); } }); } // 用于设置按钮的状态 private void updateButtonState(final Button btn, final boolean state) { runOnUiThread(new Runnable() { @Override public void run() { btn.setEnabled(state); } }); } /** * 初始化资源 */ private void initResources() { authInfo = new AuthInfo(this.getString(R.string.HUAWEICLOUD_SDK_AK), this.getString(R.string.HUAWEICLOUD_SDK_SK), Config.REGION, Config.PROJECT_ID); sisHttpConfig = new SisHttpConfig(); // 设置等待事件为5分钟 sisHttpConfig.setWebsocketWaitTimeout(dataAcceptanceTime); audioPlayerCallback = new AudioTrackServiceCallback() { @Override public void playStart() { } @Override public void playOver() { updateButtonState(startPlay, true); } }; audioTrackService = new AudioTrackService(audioPlayerCallback); } /** * 功能描述 * 语音合成websocket 版 */ private RttsRequest rttsRequets() { RttsRequest rttsRequest = new RttsRequest(); RttsRequest.Config config = new RttsRequest.Config(); config.setAudioFormat("pcm"); config.setProperty("chinese_huaxiaomei_common"); config.setSampleRate("16000"); config.setPitch(0); config.setVolume(50); rttsRequest.setCommand("START"); rttsRequest.setConfig(config); String text = textView.getText().toString().trim(); if (!StringUtils.isNullOrEmpty(text)) { rttsRequest.setText(text); } else { rttsRequest.setText("请输入合成音频"); } return rttsRequest; } }
  • 初始化Client 初始化RttsClient,其中参数包含AuthInfo和SisHttpConfig和RttsResponseListener。其中AuthInfo和SisHttpConfig的参数如表1所示。 表1 AuthInfo 参数名称 是否必选 参数类型 描述 ak 是 String 用户的ak,可参考AK/SK认证。 sk 是 String 用户的sk,可参考AK/SK认证。 serviceRegion 是 String 区域,如cn-north-4,参考终端节点。 projectId 是 String 项目ID,同region一一对应,参考获取项目ID。 serviceEndPoint 否 String 终端节点,参考地区和终端节点。 表2 SisHttpConfig 参数名称 是否必选 参数类型 描述 connectionTimeout 否 Integer 连接超时,默认10000,单位ms。 readTimeout 否 Integer 读取超时,默认10000,单位ms。 websocketWaitTimeout 否 Integer webSocket返回数据时等待时间,默认20000,单位毫秒。 ProxyHostInfo 否 ProxyHostInfo 代理类。 表3 ProxyHostInfo 参数名称 是否必选 参数类型 描述 userName 否 String 代理用户名(例:test)。 passWord 否 String 代理密码(例:test)。 hostName 否 String 代理地址(例:“proxy.huaweicloud.com”)。 port 否 int 代理端口号(例:8080)。 其中RttsResponseListener使用户自定义的,建立webSocket之后,接受服务端返回消息的Listener。 表4 RttsResponseListener 函数名称 作用 void onTranscriptionConnect(); webSocket建立连接后后调。 void onTranscriptionClose(); webSocket连接关闭后回调。 void onTranscriptionFail(RttsResponse response); 长连接连接失败是回调。 void onTranscriptionBegin(RttsResponse response); 开始合成音频数据时回调。 void onTranscriptionEnd(RttsResponse response); 合成音频数据结束时回调。 void onTranscriptionError(RttsResponse response); 合成音频数据过程中失败时回调。 void onTranscriptionResponse(byte[] bytes); 返回合成的二进制数据。
  • 响应参数 响应类为AsrCustomShortResponse,详见表4。调用失败处理方法请参见错误码。 表4 AsrCustomShortResponse 参数名 是否必选 参数类型 说明 trace_id 是 String 服务内部的令牌,可用于在日志中追溯具体流程,调用失败无此字段。 在某些错误情况下可能没有此令牌字符串。 result 是 Object 调用成功表示识别结果,调用失败时无此字段。请参考表5。 表5 Result 参数名 是否必选 参数类型 说明 text 是 String 调用成功表示识别出的内容。 score 是 Float 调用成功表示识别出的置信度,取值范围:0~1。 word_info 否 Array of objects 分词信息列表。 表6 Word_info 数据结构 参数名 是否必选 参数类型 说明 start_time 否 Integer 起始时间 end_time 否 Integer 结束时间 word 否 String 分词
  • 请求参数 请求类为AsrCustomShortRequest,详见表3。 表3 AsrCustomShortRequest 参数名称 是否必选 参数类型 描述 data 是 String 本地音频文件经过Base64编码后的字符串,音频文件时长不超过1min。 audioFormat 是 String 音频格式,具体信息请参见《API参考》中 一句话识别 章节。 property 是 String 属性字符串,语言_采样率_模型,如chinese_16k_general。具体信息请参见《API参考》中一句话识别章节。 addPunc 否 String 表示是否在识别结果中添加标点,取值为yes 、 no,默认no。 digitNorm 否 String 表示是否将语音中的数字识别为阿拉伯数字,取值为yes 、 no,默认为yes。 vocabularyId 否 String 热词表id,不使用则不填写。 创建热词表请参考《API参考》中创建热词表章节。 needWordInfo 否 String 表示是否在识别结果中输出分词结果信息,取值为“yes”和“no”,默认为“no”。
  • 初始化Client 初始化AsrCustomizationClient,其参数包括AuthInfo和SisConfig。 表1 AuthInfo 参数名称 是否必选 参数类型 描述 ak 是 String 用户的ak,可参考AK/SK认证。 sk 是 String 用户的sk,可参考AK/SK认证。 region 是 String 区域,如cn-north-4,参考终端节点。 projectId 是 String 项目ID,同region一一对应,参考获取项目ID。 endpoint 否 String 终端节点,具体请参考地区和终端节点。一般使用默认即可。 表2 SisConfig 参数名称 是否必选 参数类型 描述 connectionTimeout 否 Integer 连接超时,默认10000,单位ms。 readTimeout 否 Integer 读取超时,默认10000,单位ms。
  • 响应参数 响应类为TtsCustomResponse,详见表3。调用失败处理方法请参见错误码。 表4 TtsResponse 参数名 是否必选 参数类型 说明 isSaved 否 String 是否将响应音频保存为本地文件。 savePath 否 String 保存本地的路径,如D:/test.wav。 result 是 Object 调用成功时为合成语音内容,请参考表5。 调用失败时无此字段。 表5 Result 参数名 是否必选 参数类型 说明 data 是 String 合成后生成的语音数据,以Base64编码格式返回。用户如需生成音频,需要将Base64编码解码成byte数组,再保存为wav音频。
  • 初始化Client 初始化TtsCustomizationClient,其参数包括AuthInfo和SisConfig。 表1 AuthInfo 参数名称 是否必选 参数类型 描述 ak 是 String 用户的ak,可参考AK/SK认证。 sk 是 String 用户的sk,可参考AK/SK认证。 region 是 String 区域,如cn-north-4,参考终端节点。 projectId 是 String 项目ID,同region一一对应,参考获取项目ID。 endpoint 否 String 终端节点,参考地区和终端节点。 表2 SisConfig 参数名称 是否必选 参数类型 描述 connectionTimeout 否 Integer 连接超时,默认10000,单位ms。 readTimeout 否 Integer 读取超时,默认10000,单位ms。
  • 请求参数 请求类为TtsCustomRequest,详见表3。 表3 TtsCustomRequest 参数名称 是否必选 参数类型 描述 text 是 String 待合成的文本。 audio_format 否 String 待合成的音频格式,可选mp3,wav等,默认wav。具体信息请参见《API参考》中语音合成章节。 pitch 否 Integer 音高,[-500,500] ,默认是0。 speed 否 Integer 语速,[-500,500] ,默认是0。 volume 否 Integer 音量,[0,100],默认是50。 sample_rate 否 String 采样率,支持“8000”、“16000”,默认“8000”。 property 否 String 特征字符串,{language}_{speaker}_{domain},默认chinese_xiaoqi_common。具体信息请参见《API参考》中语音合成章节。 isSaved 否 Boolean 是否选择合成的音频数据保存到本地,默认不保存。 savePath 否 String 选择保存到本地的路径。路径需具体到文件,如D:/test.wav。
  • 代码示例 如下示例仅供参考,最新代码请前往SDK(websocket)章节获取并运行。 # -*- coding: utf-8 -*- from huaweicloud_sis.client.tts_client import TtsCustomizationClient from huaweicloud_sis.bean.tts_request import TtsCustomRequest from huaweicloud_sis.bean.sis_config import SisConfig from huaweicloud_sis.exception.exceptions import ClientException from huaweicloud_sis.exception.exceptions import ServerException import json # 鉴权参数 # 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; # 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SIS_AK/HUAWEICLOUD_SIS_SK/HUAWEICLOUD_SIS_PROJECT_ID。 ak = os.getenv("HUAWEICLOUD_SIS_AK") # 从环境变量获取ak 参考https://support.huaweicloud.com/sdkreference-sis/sis_05_0003.html assert ak is not None, "Please add ak in your develop environment" sk = os.getenv("HUAWEICLOUD_SIS_SK") # 从环境变量获取sk 参考https://support.huaweicloud.com/sdkreference-sis/sis_05_0003.html assert sk is not None, "Please add sk in your develop environment" project_id = "" # project id 同region一一对应,参考https://support.huaweicloud.com/api-sis/sis_03_0008.html def ttsc_example(): """ 语音合成demo """ region = '' # region,如cn-north-4 text = '' # 待合成文本,不超过500字 path = '' # 保存路径,如D:/test.wav。 可在设置中选择不保存本地 # step1 初始化客户端 config = SisConfig() config.set_connect_timeout(10) # 设置连接超时,单位s config.set_read_timeout(10) # 设置读取超时,单位s # 设置代理,使用代理前一定要确保代理可用。 代理格式可为[host, port] 或 [host, port, username, password] # config.set_proxy(proxy) ttsc_client = TtsCustomizationClient(ak, sk, region, project_id, sis_config=config) # step2 构造请求 ttsc_request = TtsCustomRequest(text) # 设置请求,所有参数均可不设置,使用默认参数 # 设置属性字符串, language_speaker_domain, 默认chinese_xiaoyan_common, 参考api文档 ttsc_request.set_property('chinese_xiaoyan_common') # 设置音频格式,默认wav,可选mp3和pcm ttsc_request.set_audio_format('wav') # 设置采样率,8000 or 16000, 默认8000 ttsc_request.set_sample_rate('8000') # 设置音量,[0, 100],默认50 ttsc_request.set_volume(50) # 设置音高, [-500, 500], 默认0 ttsc_request.set_pitch(0) # 设置音速, [-500, 500], 默认0 ttsc_request.set_speed(0) # 设置是否保存,默认False ttsc_request.set_saved(True) # 设置保存路径,只有设置保存,此参数才生效 ttsc_request.set_saved_path(path) # step3 发送请求,返回结果。如果设置保存,可在指定路径里查看保存的音频。 result = ttsc_client.get_ttsc_response(ttsc_request) # use enterprise_project_Id # headers = {'Enterprise-Project-Id': 'your enterprise project id', 'Content-Type': 'application/json'} # result = ttsc_client.get_ttsc_response(ttsc_request, headers) print(json.dumps(result, indent=2, ensure_ascii=False)) if __name__ == '__main__': try: ttsc_example() except ClientException as e: print(e) except ServerException as e: print(e)
  • 初始化Client 初始化TtsCustomizationClient详见表 TtsCustomizationClient初始化参数。 表1 TtsCustomizationClient初始化参数 参数名称 是否必选 参数类型 描述 ak 是 String 用户的ak,可参考AK/SK认证。 sk 是 String 用户的sk,可参考AK/SK认证。 region 是 String 区域,如:cn-north-4。具体请参考终端节点。 project_id 是 String 项目ID,同region一一对应,参考获取项目ID。 service_endpoint 否 String 终端节点,一般使用默认即可。 sis_config 否 Object 详见表2。 表2 SisConfig 参数名称 是否必选 参数类型 描述 connect_timeout 否 String 连接超时,默认10,单位s。 read_timeout 否 String 读取超时,默认10,单位s。 proxy 否 List [host, port] 或 [host, port, username, password]。
  • 请求参数 请求类为TtsCustomRequest,详见表3。 表3 TtsCustomRequest 参数名称 是否必选 参数类型 描述 text 是 String 待合成的文本。 audio_format 否 String 待合成的音频格式,可选mp3,wav等,默认wav。具体信息请参见《API参考》语音合成章节。 pitch 否 Integer 音高,[-500,500] ,默认是0。 speed 否 Integer 语速,[-500,500] ,默认是0。 volume 否 Integer 音量,[0,100],默认是50。 sample_rate 否 String 采样率,支持“8000”、“16000”,默认“8000”。 model_property 否 String 特征字符串,{language}_{speaker}_{domain},默认chinese_xiaoyan_common。具体信息请参见《API参考》中语音合成章节。 saved 否 Boolean 是否选择合成的音频数据保存到本地,默认不保存。 saved_path 否 String 选择保存到本地的路径,需要具体到音频文件,如D:/test.wav。
  • 响应参数 Python SDK响应结果为Json格式,详见表4。调用失败处理方法请参见错误码。 表4 响应结果 参数名称 是否必选 参数类型 描述 result 是 Object 调用成功时为合成语音内容,请参考表5。 trace_id 是 String 用于后台日志问题追溯。 is_saved 否 Boolean 是否保存为本地音频。 saved_path 否 String 保存音频的本地路径,只有在请求时saved参数设置为true才生效。 表5 Result 参数名称 是否必选 参数类型 说明 data 是 String 合成后生成的语音数据,以Base64编码格式返回。
  • 示例代码 如下示例仅供参考,最新代码请前往SDK(websocket)章节获取并运行。 import SwiftUI import AVFAudio import SIS struct Config { static let region = "cn-north-4" static let projectId = "" } class WebSocketDelegate: NSObject, WebSocketConnectionDelegate, ObservableObject { @Published var result = "" func onConnected(connection: WebSocketConnection) { print("connected") } func onDisconnected(connection: WebSocketConnection) { print("disconnected") } func onError(connection: WebSocketConnection, error: Error) { print(error.localizedDescription) } func onMessage(connection: WebSocketConnection, response: RASRResponse) { if response.respType == "RESULT" { self.result = response.segments![0].result.text }else if (response.respType == "ERROR"){ self.result = response.errorMsg! } } } enum STATUS { case IDLE case TRANSCRIBING } struct RASRView: View { @ObservedObject var delegate = WebSocketDelegate() @State var client: RASRClient? @State var status = STATUS.IDLE var body: some View { VStack { Button("开始录音") { do { try AVAudioSession.sharedInstance().setCategory(.record) try AVAudioSession.sharedInstance().setActive(true) } catch { self.delegate.result = "初始化录音失败" return } //认证用的AK和SK硬编码在代码中或明文存储都有很大安全风险,建议在配置文件或环境变量中密文存放,使用时解密,确保安全。 //本示例以AK和SK保存在环境变量中来实现身份验证为例,运行本示例请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 let ak = ProcessInfo.processInfo.environment["HUAWEICLOUD_SDK_AK"]! let sk = ProcessInfo.processInfo.environment["HUAWEICLOUD_SDK_SK"]! let authInfo = AuthInfo(ak: ak, sk: sk, region: Config.region, projectId: Config.projectId) var config = RASRConfig() config.addPunc = "yes" config.digitNorm = "no" config.interimResults = "yes" self.client = RASRClient(auth: authInfo, config: config) self.delegate.result = "" self.client?.delegate = self.delegate self.client?.start() self.status = .TRANSCRIBING } .buttonStyle(.borderedProminent) .disabled(self.status == .TRANSCRIBING) Button("停止录音") { self.client?.stop() self.status = .IDLE } .buttonStyle(.borderedProminent) .disabled(self.status == .IDLE) Text(self.delegate.result) } .padding() } } struct RealTimeView_Previews: PreviewProvider { static var previews: some View { RASRView() } }
  • 响应参数 结果响应类为RASRResponse,详见表2。调用失败处理方法请参见错误码。 表2 RASRResponse 参数名 参数类型 说明 respType String 参数值为RESULT,表示识别结果响应。 traceId String 服务内部的令牌,可用于在日志中追溯具体流程。 segments Array of RASRSentence 多句结果,请参考表3。 errorCode String 错误码。 errorMsg String 错误描述。 表3 RASRSentence 参数名 参数类型 说明 startTime Integer 一句的起始时间戳,单位为ms。 endTime Integer 一句的结束时间戳,单位为ms。 isFinal Boolen true表示是最终结果, false表示为中间临时结果。 result RASRResult 调用成功表示识别结果,调用失败时无此字段。 请参考表4。 表4 RASRResult 参数名 参数类型 说明 text String 识别结果。 score Float 识别结果的置信度,取值范围:0~1。此值仅会在最终结果时被赋值,在中间结果时统一置为“0.0”。 说明: 目前置信度作用不是太大,请勿过多依赖此值。
  • 初始化Client 初始化RASRClient,参数为AuthInfo和RASRConfig。 表1 AuthInfo 参数名称 是否必选 参数类型 描述 ak 是 String 用户的ak,可参考AK/SK认证。 sk 是 String 用户的sk,可参考AK/SK认证。 region 是 String 区域,如cn-north-4,参考终端节点。 projectId 是 String 项目ID,同region一一对应,参考获取项目ID。 表2 RASRConfig 参数名称 是否必选 参数类型 描述 audioFormat 是 String 音频格式,SDK内置录音功能只支持pcm16k16bit,参见《API参考》中开始识别章节。 property 是 String 属性字符串,language_sampleRate_domain, 如chinese_16k_general,参见《API参考》中开始识别章节。 addPunc 否 String 表示是否在识别结果中添加标点,取值为yes 、 no,默认no。 digitNorm 否 String 表示是否将语音中的数字识别为阿拉伯数字,取值为yes 、 no,默认为yes。 vocabularyId 否 String 热词表id,不使用则不填写。 创建热词表请参考《API参考》中创建热词表章节。 interimResults 否 String 是否输出中间结果,可以为yes或no。默认为no,表示不输出中间结果。
  • 响应参数 状态响应类为StateResponse,详见表4。 结果响应类为RasrResponse,详见表5。 调用失败处理方法请参见错误码。 表4 StateResponse 参数名称 是否必选 参数类型 描述 state 是 String 识别状态,包括start、end、fail。 traceId 是 String 用于日志问题追溯。 description 是 String 状态描述。 表5 RasrResponse 参数名 参数类型 说明 resp_type String 参数值为RESULT,表示识别结果响应。 trace_id String 服务内部的令牌,可用于在日志中追溯具体流程。 segments Array of objects 多句结果。 请参考表6。 表6 Segment 参数名 参数类型 说明 start_time Integer 一句的起始时间戳,单位为ms。 end_time Integer 一句的结束时间戳,单位为ms。 is_final Boolen true表示是最终结果, false表示为中间临时结果。 result Object 调用成功表示识别结果,调用失败时无此字段。 请参考表7。 表7 Result 参数名 参数类型 说明 text String 识别结果。 score Float 识别结果的置信度,取值范围:0~1。此值仅会在最终结果时被赋值,在中间结果时统一置为“0.0”。 说明: 目前置信度作用不是太大,请勿过多依赖此值。 word_info Array of Object 分词输出列表。 表8 Word_info 数据结构 参数名 是否必选 参数类型 说明 start_time 否 Integer 起始时间 end_time 否 Integer 结束时间 word 否 String 分词
  • 请求参数 请求类为SasrWebsocketRequest,详见表 SasrWebsocketRequest。 表3 SasrWebsocketRequest 参数名称 是否必选 参数类型 描述 audioFormat 是 String 音频格式,支持pcm,alaw,ulaw等,如pcm8k16bit,具体规格请参见《API参考》中开始识别章节。 property 是 String 属性字符串,language_sampleRate_domain, 如chinese_8k_common。 punc 否 String 表示是否在识别结果中添加标点,取值为yes 、 no,默认no。 digitNorm 否 String 表示是否将语音中的数字识别为阿拉伯数字,取值为yes 、 no,默认为yes。 intermediateResult 否 String 是否显示中间结果,yes 或 no,默认no。 vocabularyId 否 String 热词表id,若没有则不填。 needWordInfo 否 String 表示是否在识别结果中输出分词结果信息,取值为“yes”和“no”,默认为“no”。
  • 初始化Client 初始化SasrWebsocketClient,其参数包括AuthInfo、RasrListener、SisConfig。 表1 AuthInfo 参数名称 是否必选 参数类型 描述 ak 是 String 用户的ak,可参考AK/SK认证。 sk 是 String 用户的sk,可参考AK/SK认证。 region 是 String 区域,如cn-north-4,参考终端节点。 projectId 是 String 项目ID,同region一一对应,参考获取项目ID。 endpoint 否 String 终端节点,参考地区和终端节点。一般使用默认即可。 表2 SisConfig 参数名称 是否必选 参数类型 描述 connectionTimeout 否 Integer 连接超时,默认10000,单位ms。 readTimeout 否 Integer 读取超时,默认10000,单位ms。
  • 初始化Client 初始化RttsClient,其参数包括AuthInfo和SisConfig。 表1 AuthInfo 参数名称 是否必选 参数类型 描述 ak 是 String 用户的ak,可参考AK/SK认证。 sk 是 String 用户的sk,可参考AK/SK认证。 region 是 String 区域,如cn-north-4,参考终端节点。 projectId 是 String 项目ID,同region一一对应,参考获取项目ID。 endpoint 否 String 终端节点,参考地区和终端节点。 表2 SisConfig 参数名称 是否必选 参数类型 描述 connectionTimeout 否 Integer 连接超时,默认10000,单位ms。 readTimeout 否 Integer 读取超时,默认10000,单位ms。 websocketWaitTimeout 否 Integer websocket最大等待超时,默认20000,单位ms
  • 请求参数 请求类为RttsRequest,详见表3。 表3 RttsRequest 名称 参数类型 是否必选 说明 command String 是 需设置为START,表示开始识别请求。 text String 是 待合成的文本,文本长度限制小于500字符。 config Object 否 配置信息。请参考表 config数据结构。 表4 Config 名称 参数类型 是否必选 说明 audio_format String 否 语音格式头:pcm、alaw、ulaw。 默认:pcm sample_rate String 否 采样率:16000、8000。 默认:8000 property String 否 语音合成特征字符串,组成形式为{language}_{speaker}_{domain},即“语种_人员标识_领域”。 language取值范围: chinese speaker取值范围: xiaoqi 正式女生 xiaoyu正式男生 xiaoyan情感女生 xiaowang童声 speaker(精品发音人)取值范围: huaxiaomei温柔女声发音人,仅支持pcm huaxiaofei朝气男声发音人,仅支持pcm domain取值范围: common,通用领域 默认:chinese_xiaoyan_common 实时语音合成和语音合成属于同一种资源,按次计费。实时语音合成普通发音人,每100字计一次。精品发音人每50字计一次。 speed Integer 否 语速。 取值范围:-500~500 默认值:0 pitch Integer 否 音高。 取值范围:-500~500 默认值:0 volume Integer 否 音量。 取值范围:0~100 默认值:50
  • 代码示例 如下示例仅供参考,最新代码请前往SDK(websocket)章节获取并运行。 # -*- coding: utf-8 -*- from huaweicloud_sis.client.asr_client import SasrWebsocketClient from huaweicloud_sis.bean.asr_request import SasrWebsocketRequest from huaweicloud_sis.bean.callback import RasrCallBack from huaweicloud_sis.bean.sis_config import SisConfig import json import os # 鉴权参数 # 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; # 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SIS_AK/HUAWEICLOUD_SIS_SK。 ak = os.getenv("HUAWEICLOUD_SIS_AK") # 从环境变量获取ak 参考https://support.huaweicloud.com/sdkreference-sis/sis_05_0003.html assert ak is not None, "Please add ak in your develop environment" sk = os.getenv("HUAWEICLOUD_SIS_SK") # 从环境变量获取sk 参考https://support.huaweicloud.com/sdkreference-sis/sis_05_0003.html assert sk is not None, "Please add sk in your develop environment" project_id = "" # project id 同region一一对应,参考https://support.huaweicloud.com/api-sis/sis_03_0008.html region = 'cn-north-4' # region,如cn-north-4 # 一句话识别参数 path = '' # 需要发送音频路径,如D:/test.pcm, 同时sdk也支持byte流发送数据。 audio_format = '' # 音频支持格式,如pcm16k16bit,详见api文档 property = '' # 属性字符串,language_sampleRate_domain, 如chinese_16k_common, 采样率要和音频一致。详见api文档 class MyCallback(RasrCallBack): """ 回调类,用户需要在对应方法中实现自己的逻辑,其中on_response必须重写 """ def on_open(self): """ websocket连接成功会回调此函数 """ print('websocket connect success') def on_start(self, message): """ websocket 开始识别回调此函数 :param message: 传入信息 :return: - """ print('webscoket start to recognize, %s' % message) def on_response(self, message): """ websockert返回响应结果会回调此函数 :param message: json格式 :return: - """ print(json.dumps(message, indent=2, ensure_ascii=False)) def on_end(self, message): """ websocket 结束识别回调此函数 :param message: 传入信息 :return: - """ print('websocket is ended, %s' % message) def on_close(self): """ websocket关闭会回调此函数 """ print('websocket is closed') def on_error(self, error): """ websocket出错回调此函数 :param error: 错误信息 :return: - """ print('websocket meets error, the error is %s' % error) def on_event(self, event): """ 出现事件的回调 :param event: 事件名称 :return: - """ print('receive event %s' % event) def sasr_websocket_example(): """ 一句话识别 websocket demo """ # step1 初始化SasrWebsocketClient, 暂不支持使用代理 my_callback = MyCallback() config = SisConfig() # 设置连接超时,默认是10 config.set_connect_timeout(10) # 设置读取超时, 默认是10 config.set_read_timeout(10) # 设置connect lost超时,一般在普通并发下,不需要设置此值。默认是10 config.set_connect_lost_timeout(10) # websocket暂时不支持使用代理 sasr_websocket_client = SasrWebsocketClient(ak=ak, sk=sk, use_aksk=True, region=region, project_id=project_id, callback=my_callback, config=config) try: # step2 构造请求 request = SasrWebsocketRequest(audio_format, property) # 所有参数均可不设置,使用默认值 request.set_add_punc('yes') # 设置是否添加标点, yes or no, 默认no request.set_interim_results('no') # 设置是否返回中间结果,yes or no,默认no request.set_digit_norm('no') # 设置是否将语音中数字转写为阿拉伯数字,yes or no,默认yes # request.set_vocabulary_id('') # 设置热词表id,若不存在则不填写,否则会报错 request.set_need_word_info('no') # 设置是否需要word_info,yes or no, 默认no # step3 连接服务端 sasr_websocket_client.sasr_stream_connect(request) # use enterprise_project_Id # headers = {'Enterprise-Project-Id': 'your enterprise project id'} # sasr_websocket_client.sasr_stream_connect(request, headers) # step4 发送音频 sasr_websocket_client.send_start() # 连续模式下,可多次发送音频,发送格式为byte数组 with open(path, 'rb') as f: data = f.read() sasr_websocket_client.send_audio(data) # 可选byte_len和sleep_time参数,建议使用默认值 sasr_websocket_client.send_end() except Exception as e: print('sasr websocket error', e) finally: # step5 关闭客户端,使用完毕后一定要关闭,否则服务端20s内没收到数据会报错并主动断开。 sasr_websocket_client.close() if __name__ == '__main__': sasr_websocket_example()
  • 响应参数 Python SDK响应结果为Json格式,详见表4。调用失败处理方法请参见错误码。 表4 响应结果 参数名称 是否必选 参数类型 描述 resp_type 是 String 参数值为RESULT,表示识别结果响应。 trace_id 是 String 服务内部的令牌,可用于在日志中追溯具体流程。 segments 是 Array of objects 多句结果。详见表5。 表5 Segment 参数名称 是否必选 参数类型 描述 start_time 是 Integer 一句的起始时间戳,单位为ms。 end_time 是 Integer 一句的结束时间戳,单位为ms。 is_final 是 Boolen true表示是最终结果, false表示为中间临时结果。 result 是 Object 调用成功表示识别结果,详见表6。 表6 Result 参数名称 是否必选 参数类型 描述 text 是 String 识别结果。 score 是 Float 识别结果的置信度(0-1之间)。此值仅会在最终结果时被赋值,在中间结果时统一置为“0.0”。 word_info 否 Array of objects 分词信息列表。 表7 Word_info 参数名 是否必选 参数类型 说明 start_time 否 Integer 起始时间 end_time 否 Integer 结束时间 word 否 String 分词
共100000条