# SparkChain 实时语音转写 Linux SDK集成文档

# 1. 实时语音转写简介

实时语音转写(Real-time ASR)基于深度全序列卷积神经网络框架,通过 WebSocket 协议,建立应用与语言转写核心引擎的长连接,开发者可实现将连续的音频流内容,实时识别返回对应的文字流内容。 支持的音频格式: 采样率为16K,采样深度为16bit,单声道的pcm音频

注意:在使用该能力前,需要开通相应的授权。

# 2. 兼容性说明

类别 兼容范围
系统 支持x86,x86_64,arm和arm64架构,支持交叉编译,适配常见芯片型号。
开发环境 建议使用 VS Studio 进行开发

# 3. SDK集成包目录结构

将SDK zip包解压缩,得到如下文件:

├── Demo SparkChain的使用DEMO,DEMO中已经集成了SDK,您可以参考DEMO,集成SDK。集成前,请先测通DEMO,了解调用原理。

├── ReleaseNotes.txt SDK版本日志

├── SDK SparkChain SDK

│ └── libSparkChain.so (opens new window)

└── SparkChain 实时语音转写 Linux SDK集成文档.pdf SparkChain集成指南

# 4. SDK工程配置

# 4.1 导入SDK库

将SDK/libs文件夹、头文件文件夹include存放到项目中,并在环境变量里添加库路径;

#include "../../include/sparkchain.h"
#include "../../include/sc_rtAsr.h"

# 4.2 配置权限

如果需要存储日志,SDK日志路径需要读写权限,缺少读写权限,日志将无法正常存储。

# 5. 接口流程调用图

# 6. SDK 初始化

在使用SparkChain 实时语音转写功能前,需要首先开通实时语音转写功能授权并获取已开通授权的应用信息(appId、apiKey、apiSecret)。SDK全局只需要初始化一次。 初始化时,开发者需要构建一个SparkChainConfig实例config,把相关的appid信息以及日志设置等传入config中,然后再通过SparkChain::init(config)方法把config实例设置到SDK中。SparkChainConfig 结构如下:

class SPARKCHAIN_API SparkChainConfig { 
    public:    
    	static SparkChainConfig* builder();    
    	virtual ~SparkChainConfig();    
    	//配置appid    
    	virtual SparkChainConfig* appID(const char* appid)         = 0;    
    	//配置apiKey    
    	virtual SparkChainConfig* apiKey(const char* apiKey)       = 0;    
    	//配置apiSecret    
    	virtual SparkChainConfig* apiSecret(const char* apiSecret) = 0;    
    	//配置用户自定义标识    
    	virtual SparkChainConfig* uid(const char* uid)             = 0;    
    	//配置SDK工作路径    
    	virtual SparkChainConfig* workDir(const char* workDir)     = 0;    
    	//配置日志等级    
    	virtual SparkChainConfig* logLevel(int logLevel )          = 0;    
    	//配置日志存储路径    
    	virtual SparkChainConfig* logPath(const char* logPath)     = 0; 
};

初始化参数说明:

接口名称 含义 参数类型 限制 是否必填
appID 创建应用后,生成的应用ID const char* 与平台生成的appID完全一致
apiKey 创建应用后,生成的唯一应用标识 const char* 与平台生成的apiKey完全一致
apiSecret 创建应用后,生成的唯一应用秘钥 const char* 与平台生成的apiSecret完全一致
logLevel 日志等级 int 枚举,0:VERBOSE,1:DEBUG,2:INFO,3:WARN,4:ERROR,5:FATAL,100:OFF
logPath 日志存储路径,设置则会把日志存在该路径下,不设置则会把日志打印在终端上 const char* 设置的路径需要有读写权限
uid 用户自定义标识 const char*

初始化返回值:0:初始化成功,非0:初始化失败,请根据具体返回值参考错误码章节查询原因。

具体示例如下:

SparkChainConfig* config = SparkChainConfig::builder(); 
config->appID("$appId")      
    ->apiKey("$apiKey")      
    ->apiSecret("$apiSecret");//从平台获取的授权appid,apikey,apisecrety 
int ret = SparkChain::init(config);

# 7. 实时语音转写初始化

在使用实时语音转写功能前,需先通过其构造方法RTASR()方法构建其实例,然后用该实例调用相应的方法去设置转写参数。

实时语音转写构造方法如下:

class SPARKCHAIN_API RTASR {
public:
    RTASR(const string apiKey);
}

构造方法参数说明:

方法名 参数名 类型 说明
RTASR apikey const string apikey,用于建立链接时鉴权。可从开放平台 (opens new window)查看。
注意,该值与SDK初始化时传入apiKey不同。

具体示例如下:

RTASR rtasr(RTAsrAPIKey);//RTASR 初始化

# 8. 功能参数配置

SDK支持用户根据自身需求,通过构建的RTASR实例访问相关方法配置转写参数。具体方法说明如下:

方法名 形参名 形参类型 说明 是否必填 默认值
lang lang string 实时语音转写语种,不传默认为中文。若未授权无法使用会报错10110 cn
transType transType string normal表示普通翻译。注意:需控制台开通翻译功能 normal
transStrategy transStrategy int 策略1,转写的vad结果直接送去翻译;
策略2,返回中间过程中的结果;
策略3,按照结束性标点拆分转写结果请求翻译; 建议使用策略2。
注意:需控制台开通翻译功能
2
targetLang targetLang string 目标翻译语种:控制把源语言转换成什么类型的语言; 请注意类似英文转成法语必须以中文为过渡语言,即英-中-法,暂不支持不含中文语种之间的直接转换;
中文:cn
英文:en
日语:ja
韩语:ko
俄语:ru
法语:fr
西班牙语:es
越南语:vi
广东话:cn_cantonese
如果不传,则默认不使用翻译,即没有翻译结果返回
punc punc string 标点过滤控制,默认返回标点,punc=0会过滤结果中的标点 不传则默认返回标点
pd pd string 垂直领域个性化参数:
法院: court
教育: edu
金融: finance
医疗: medical
科技: tech
运营商: isp
政府: gov
电商: ecom
军事: mil
企业: com
生活: life
汽车: car
不设置参数默认为通用
vadMdn vadMdn int 远近场切换,不传此参数或传1代表远场,传2代表近场 不传默认为远场
roleType roleType int 是否开角色分离,默认不开启,传2开启 (效果持续优化中) 不开启
engLangType engLangType int 语言识别模式,默认为模式1中英文模式:
1:自动中英文模式
2:中文模式,可能包含少量英文
4:纯中文模式,不包含英文
1

具体配置示例如下:

rtasr.transType("normal");
rtasr.transStrategy(2);
...
rtasr.lang("cn");
rtasr.targetLang("en");

# 9. 注册结果监听回调

实时语音转写运行结果通过RTASRCallbacks异步返回,接口定义如下:

class SPARKCHAIN_API RtAsrCallbacks {
public:
	virtual void onResult(RtAsrResult* result, void* usrTag) = 0;
    virtual void onError(RtAsrError* error, void* usrTag) = 0;
};

RtAsrCallbacks数据结构说明:

  • onResult为实时语音转写结果回调方法,参数说明如下:

    参数 类型 说明
    result RtAsrResult* 实时语音转写结果实例
    usrTag void* 用户自定义标识
  • RtAsrResult结构说明:

    方法 返回值类型 说明
    data() string 转写结果
    rawResult() string 云端下发的原始json结果
    status() int 数据状态:
    0:此次返回翻译结果。(此时仅翻译有结果,data无结果)
    1:流式识别结果
    2:子句plain结果
    3:end
    sid() string 本次交互的sid
    transResult().src() String 翻译的源文本
    transResult().dst() String 翻译结果
    transResult().status() int 翻译状态:
    2:翻译的plain结果
  • onError为实时语音转写错误回调,参数说明如下:

    参数 类型 说明
    error RtAsrError 错误信息结果实例
    usrTag void* 用户自定义标识
  • RtAsrError结构说明:

    方法 返回值类型 说明
    code() int 错误码
    errMsg() string 错误信息
    sid() string 交互的Sid

具体示例如下:

class RtAsrCallbacksImpl :public RtAsrCallbacks{
    void onResult(RtAsrResult* result, void* usrTag){
        int status       = result->status();//数据状态。0:此次返回翻译结果;1:流式结果;2:子句plain结果;3:end结束
        string sid       = result->sid();//本次交互的sid
        string rawResult = result->rawResult();//云端下发的原始json结果
        string data      = result->data();//转写结果
        string src       = result->transResult()->src();//翻译源文本
        string dst       = result->transResult()->dst();//翻译结果
    }
    void onError(RtAsrError* error, void* usrTag){
        string sid    = error->sid();//本次交互的sid
        int code      = error->code();//错误码
        string errMsg = error->errMsg();//错误信息
    }
};
RtAsrCallbacksImpl *mRTASRCallbacks = new RtAsrCallbacksImpl();  
rtasr.registerCallbacks(mRTASRCallbacks);

# 10. 请求调用

# 10.1 开启会话

开发者注册完监听回调后,可通过mRTASR.start()方法开启会话。请求调用接口如下:

class SPARKCHAIN_API RTASR {
public:
    int start(void* usrTag = nullptr);
}

start方法结构说明:

参数 类型 说明
usrTag void* 用户自定义标识

具体示例如下:

rtasr.start();

# 10.2 送入数据

启动会话后,开发者可通过rtasr.write()方法送入要识别的音频,然后异步从监听回调中获取识别结果。write方法调用接口如下:

class SPARKCHAIN_API RTASR {
public:
    int write(const char* data, size_t len);
}

write方法参数说明:

参数 类型 说明
data const char* 识别音频
注意:
1.建议音频流每40ms发送1280字节,发送过快可能导致引擎出错;
2.音频发送间隔超时时间为15秒,超时服务端报错并主动断开连接。

具体示例如下:

char * data = new char[1280];
...//省略获取音频的过程 
rtasr.write(data,1280);

# 10.3 结束会话

当开发者送完数据后,需要调用rtasr.stop()方法通知SDK层以及云端数据已传完。之后云端则会下发最终的识别结果,然后结束本轮交互。stop方法调用接口如下:

class SPARKCHAIN_API RTASR {
public:
    int stop();
}

具体示例如下:

rtasr.stop();      //停止

# 11. 逆初始化

当SDK需要完整退出时,需调用逆初始化方法释放资源,示例代码如下:

SparkChain::unInit();  //SDK逆初始化

# 12. SDK API介绍

# 12.1 SparkChainConfig API

返回值类型 方法说明
SparkChainConfig* virtual SparkChainConfig* appID(const char* appid) = 0
设置用户的appID
SparkChainConfig* virtual SparkChainConfig* apiKey(const char* apiKey) = 0
设置用户的apiKey
SparkChainConfig* virtual SparkChainConfig* apiSecret(const char* apiSecret) = 0
设置用户的apiSecret
SparkChainConfig* virtual SparkChainConfig* uid(const char* uid) = 0
设置用户自定义标识
SparkChainConfig* virtual SparkChainConfig* workDir(const char* workDir) = 0
设置SDK工作路径
SparkChainConfig* virtual SparkChainConfig* logLevel(int logLevel ) = 0
设置日志等级
SparkChainConfig* virtual SparkChainConfig* logPath(const char* logPath) = 0
设置日志保存路径
SparkChainConfig* static SparkChainConfig* builder()
构建SparkChain实例

# 12.2 SparkChain API

返回值类型 方法说明
int32_t SPARKCHAIN_API int32_t init(SparkChainConfig* config)
SDK初始化
int32_t SPARKCHAIN_API int32_t unInit()
SDK逆初始化

# 12.3 RTASR API

返回值类型 方法说明
int int start(void* usrTag = nullptr)
启动会话
int int write(const char* data, size_t len)
输入数据
int int stop()
结束会话
void void lang(string lang)
设置识别的语种
void void transType(string transType)
设置翻译类型
void void transStrategy(int transStrategy)
设置翻译策略
void void targetLang(string targetLang)
设置翻译方向的语种
void void punc(string punc)
标点过滤控制
void void pd(string pd)
垂直领域个性化参数
void void vadMdn(int vadMdn)
远近场切换
void void roleType(int roleType)
是否开角色分离
void void engLangType(int engLangType)
语言识别模式
void void registerCallbacks(RtAsrCallbacks* cbs)
注册实时语音转写的结果监听回调

# 12.4 RTASRResult API

返回值类型 方法说明
string virtual string rawResult() = 0
云端返回的原始结果
RtTransResult virtual RtTransResult* transResult() = 0
获取翻译结果实例
string virtual string data() = 0
获取识别结果
int virtual int status() = 0
获取数据状态
string virtual string sid() = 0
获取交互sid

# 12.5 RTASRError API

返回值类型 方法说明
int virtual int code() = 0
获取错误码
string virtual string errMsg() = 0
获取错误信息
string virtual string sid() = 0
获取交互sid

# 12.6 RTASRTransResult API

返回值类型 方法说明
int virtual int status() = 0
获取翻译数据状态
string virtual string src() = 0
获取翻译源文本
string virtual string dst() = 0
获取翻译结果

# 13. 错误码

错误码包含SDK错误码和云端错误码。

# 13.1 SDK错误码

错误码 含义 自查指南
0 操作成功
18000 本地license文件不存在 检查工作目录下是否存在license文件,或者该目录是否有读写权限
18001 授权文件内容非法 授权文件存在问题,请联系技术支持询问
18002 授权文件解析失败 授权文件可能存在损坏,请联系技术支持询问
18003 payload内容缺失 授权文件存在问题,请联系技术支持询问
18004 signature内容缺失 授权文件存在问题,请联系技术支持询问
18005 授权已过期 授权时间过期,请检查系统时间是否是当前时间,并联系技术支持询问
18006 授权时间错误,比正常时间慢30分钟以上 请检查系统时间是否正确
18007 授权应用不匹配(apiKey、apiSecret) apiKey、apiSecret 配置有误,请核对项目中配置的 apiKey、apiSecret 。
18008 授权文件激活过期 授权文件已超过15天未激活,需要联系相关人员重新生成离线授权文件
18009 授权app信息指针为空
18010 离线授权激活文件指定平台与设备平台不匹配 授权文件里预置的平台架构与实际运行的设备的平台架构不一致
18011 离线授权激活文件指定架构与设备cpu架构不匹配 授权文件里预置的cpu架构与实际运行的设备的cpu架构不一致
18012 离线授权激活文件中包含License个数异常 离线授权文件异常,请联系相关人员重新生成离线授权文件
18013 离线授权激活文件中未找到当前设备 当前运行的设备的设备指纹不在离线授权文件中,请检查该设备的设备指纹是否在提供的指纹池中
18014 离线授权激活文件中设备指纹安全等级非法 请联系技术支持调整该appid的设备指纹等级
18015 硬件授权验证失败 硬件授权验证失败,请联系相关人员处理
18016 离线授权激活文件内容非法 离线授权文件被修改,请联系相关人员重新生成离线授权文件
18017 离线授权激活文件中协议头非法 离线授权文件被修改,请联系相关人员重新生成离线授权文件
18018 离线授权激活文件中指纹组成项个数为0 离线授权文件生成异常,请联系相关人员重新生成离线授权文件
18019 资源已过期 资源的时间校验已过期,请联系相关人员增加授权时间
18100 资源鉴权失败 资源鉴权失败,请联系相关人员处理
18101 资源格式解析失败 资源格式解析失败,请联系相关人员处理
18102 资源(与引擎)不匹配 资源(与引擎)不匹配,请检查资源是否用错,如果未用错,请联系相关人员处理
18103 资源参数不存在(指针为NULL) 资源参数不存在,请检查资源是否正确
18104 资源路径打开失败 资源路径打开失败,请检查工作目录下是否存在该资源,或者该资源是否存在读写权限
18105 资源加载失败,workDir内未找到对应资源 请检查workDir中是否存在此资源,或者resDir是否设置正确,或者app是否有改路径的读写权限
18106 资源卸载失败, 卸载的资源未加载过 资源卸载失败, 卸载的资源未加载过
18200 引擎鉴权失败 引擎鉴权失败,引擎存在问题。请联系技术支持询问
18201 引擎动态加载失败 引擎动态加载失败,请联系技术支持询问
18202 引擎未初始化 引擎在使用前,需要调用engineInit初始化
18203 引擎不支持该接口调用 引擎不支持该接口调用,请查询对应的能力文档,使用正确的方法调用
18204 引擎craete函数指针为空 引擎存在问题,请联系技术支持询问
18300 SDK不可用 SDK存在异常,请联系技术支持询问
18301 SDK未初始化 在使用大模型前请先初始化 SDK,如果有调用 uninit 方法,再次使用大模型交互时需要重新初始化。
18302 SDK初始化失败 请根据init接口回调中返回的错误码参考此文档做对应检查
18303 SDK 已经初始化 重复初始化导致,使用能力时,SDK 只需要初始化一次,请检查 SDK 初始化逻辑是否存在多次初始化。
18304 不合法参数 请参考demo及集成文档仔细检查所传参数是否正确。
18305 SDK会话handle为空 请检查代码逻辑,handle是否被释放
18306 SDK会话未找到 SDK会话未找到
18307 SDK会话重复终止 SDK会话重复终止,请检查代码逻辑
18308 超时错误 请求超时
18309 SDK正在初始化中 SDK正在初始化中,请检查代码逻辑
18310 SDK会话重复开启 SDK会话重复开启,请检查代码逻辑
18311 sdk同一能力并发路数超出最大限制 sdk同一能力并发路数超出最大限制
18312 此实例已处在运行态,禁止单实例并发运行 SDK同一能力单实例不支持并发
18400 工作目录无写权限 在设置 workDir 时,请确保该工作路径有读写权限。若无法设置读写权限,请修改为有读写权限的工作路径。
18401 设备指纹获取失败,设备未知 采集不到设备指纹
18402 文件打开失败 请检查 日志中所打印的文件是否存在,以及对应路径下是否有读权限。
18403 内存分配失败 请联系技术支持询问
18404 设备指纹比较失败 请联系技术支持询问
18500 未找到该参数 key 请参照demo或集成文档仔细检查参数名拼写
18501 参数范围溢出,不满足约束条件 请根据文档检查调用 SDK 方法时所传参数范围,需要确保所传参数符合协议约束要求
18502 SDK 初始化参数为空 请根据 SDK 集成文档检查 SDK 初始化代码,确保必填参数有值且合法
18503 SDK 初始化参数中 appId 为空 appId 为空值,请在 SDK 初始化时传入正确的 appId 值
18504 SDK 初始化参数中 apiKey为空 apiKey为空值,请在 SDK 初始化时传入正确的 apiKey值
18505 SDK 初始化参数中 apiSecret 为空 apiSecret 为空值,请在 SDK 初始化时传入正确的 apapiSecret 值
18506 ability参数为空 请检查代码逻辑,参数是否未传入
18507 input参数为空 请检查代码逻辑,参数是否未传入
18508 输入数据参数Key不存在 请检查代码逻辑,参数key是否不符合该引擎
18509 必填参数缺失 请参考demo或者文档检查是否漏传必填参数
18510 output参数缺失 引擎输出参数异常,请联系技术支持询问
18520 不支持的编解码类型 请检查送入的数据是否符合要求
18521 编解码handle指针为空 请检查代码逻辑,handle是否被释放
18522 编解码模块条件编译未打开 请联系技术支持询问
18523 编码错误 请联系技术支持询问
18524 解码错误 请联系技术支持询问
18600 协议中时间戳字段缺失 协议文件异常,请联系技术支持询问
18601 协议中未找到该能力ID 调用的能力不在该SDK中,请检查SDK是否使用错误,或者调用能力id是否写错
18602 协议中未找到该资源ID appid没有该资源的使用权限
18603 协议中未找到该引擎ID 协议存在问题,请联系技术支持询问
18604 协议中引擎个数为0 协议存在问题,请联系技术支持询问
18605 协议未被初始化解析 协议存在问题,请联系技术支持询问
18606 协议能力接口类型不匹配 协议存在问题,请联系技术支持询问
18607 预置协议解析失败 协议存在问题,请联系技术支持询问
18700 通用网络错误 请检查网络连接是否正常
18701 网络不通 请检查网络连接是否正常
18702 网关检查不过 检查设备时间是否正确; 请检查 SDK 初始化时所传 apiKey、apiScrect 是否正确;
18703 云端响应格式不对 请检查网络是否可以正常访问外网
18704 应用未注册 appid存在问题,请检查 appid 是否正确
18705 应用 ApiKey & ApiSecret 校验失败 请检查 apiKey、apiSecret 是否正确
18706 引擎不支持的平台架构 请检查运行的设备平台引擎是否支持
18707 授权已过期 请检查授权期限
18708 无可用授权 没有授权或者授权已满
18709 未找到该app绑定的能力 请检查该appid是否申请该能力
18710 未找到该app绑定的能力资源 该appid没有该资源的使用权限,请联系技术支持询问
18711 JSON操作失败 请联系技术支持询问
18712 网络请求 404 错误 请检查网络是否通畅
18713 设备指纹安全等级不匹配 设备指纹安全等级不符合要求
18714 应用信息有误 服务端无法查询到api_key,请检查api_key和api_secret信息是否填写正确
18715 未找到该SDK ID SDK异常,请联系技术支持询问
18716 未找到该组合能力集合 请检查使用的能力是否是该appid所申请的能力
18717 SDK授权不足 授权数量已满
18718 无效授权应用签名 应用签名异常,请联系技术支持询问
18719 应用签名不唯一 应用签名异常,请联系技术支持询问
18720 能力schema不可用 请联系技术支持询问
18721 竞争授权: 未找到能力集模板 请联系技术支持询问
18722 竞争授权: 能力不在模板能力集模板中 请联系技术支持询问
18801 连接建立出错 请检查网络是否通畅
18802 结果等待超时 请检查网络是否通畅
18803 连接状态异常 请检查网络是否通畅
18902 并发超过路数限制 不支持并发
18903 大模型规划步骤为空 请检查请求数据的意图是否明确
18904 插件未找到 请检查是否使用了未存在的插件
18906 与大模型交互次数超限制
18907 运行超限制时长
18908 大模型返回结果格式异常 可能是因为大模型结果太多,导致30秒内没有返回完,从而引起SDK内部认为超时,建议使用异步调用。
18951 同一流式大模型会话,禁止并发交互请求
18952 输入数据为空或异常
19001 设备级授权: 设备被禁用
19002 设备级授权: 协议解析失败
19003 设备级授权: 本地缓存获取失败
19004 设备级授权: 无网络
19005 设备级授权: 授权未找到
19006 设备级授权: 设备授权获取失败
19007 设备级授权: 当前设备处于黑名单
19008 设备级授权: 当前设备不在白名单
19010 设备级授权: 鉴权参数非法
20011 设备级授权: 不匹配的appid

# 13.2 部分云端错误码

备注:如出现下述列表中没有的错误码,可到 这里 (opens new window) 查询。

错误码 描述 说明 处理方式
0 success 成功
10105 illegal access 没有权限 检查apiKey,ip,ts等授权参数是否正确
10106 invalid parameter 无效参数 上传必要的参数, 检查参数格式以及编码
10107 illegal parameter 非法参数值 检查参数值是否超过范围或不符合要求
10110 no license 无授权许可 检查参数值是否超过范围或不符合要求
10700 engine error 引擎错误 提供接口返回值,向服务提供商反馈
10202 websocket connect error websocket连接错误 检查网络是否正常
10204 websocket write error 服务端websocket写错误 检查网络是否正常,向服务提供商反馈
10205 websocket read error 服务端websocket读错误 检查网络是否正常,向服务提供商反馈
16003 basic component error 基础组件异常 重试或向服务提供商反馈
10800 over max connect limit 超过授权的连接数 确认连接数是否超过授权的连接数
在线
咨询
建议
反馈
体验
中心