nlsCppSdk/framework/common/nlsGlobal.h (182 lines of code) (raw):

/* * Copyright 2021 Alibaba Group Holding Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef NLS_SDK_GLOBAL_H #define NLS_SDK_GLOBAL_H #if defined(_MSC_VER) #define NLS_SDK_DECL_EXPORT __declspec(dllexport) #define NLS_SDK_DECL_IMPORT __declspec(dllimport) #if defined(_NLS_SDK_SHARED_) #define NLS_SDK_CLIENT_EXPORT NLS_SDK_DECL_EXPORT #else #define NLS_SDK_CLIENT_EXPORT NLS_SDK_DECL_IMPORT #endif #define NLS_EXTERN_C extern "C" #define NLS_EXPORTS NLS_SDK_DECL_EXPORT #define NLS_CDECL __cdecl #define NLSAPI(rettype) NLS_EXTERN_C NLS_EXPORTS rettype NLS_CDECL typedef int(NLS_CDECL* NlsCallbackDelegate)(void*); #else #if defined(_NLS_SDK_SHARED_) #define NLS_SDK_CLIENT_EXPORT __attribute__((visibility("default"))) #else #define NLS_SDK_CLIENT_EXPORT #endif #endif enum ENCODER_TYPE { ENCODER_NONE = 0, ENCODER_OPUS, ENCODER_OPU, }; enum NlsRetCode { Success = 0, /* common */ DefaultError = 10, /* 默认错误 */ JsonParseFailed, /* 错误的Json格式 */ JsonObjectError, /* 错误的Json对象 */ MallocFailed, /* Malloc失败 */ ReallocFailed, /* Realloc失败 */ InvalidInputParam, /* 传入无效的参数 */ /* log */ InvalidLogLevel = 50, /* 无效日志级别 */ InvalidLogFileSize, /* 无效日志文件大小 */ InvalidLogFileNum, /* 无效日志文件数量 */ /* encoder */ EncoderExistent = 100, /* NLS的编码器已存在 */ EncoderInexistent, /* NLS的编码器不存在 */ OpusEncoderCreateFailed, /* Opus编码器创建失败 */ OggOpusEncoderCreateFailed, /* OggOpus编码器创建失败 */ InvalidEncoderType, /* encoder类型无效 */ /* encoder - oggopus internal */ OggOpusInvalidState = 110, /* OggOpus状态不正确 */ OggOpusCreateFailed, /* OggOpus创建失败 */ OggOpusStartFailed, /* OggOpus启动失败 */ OggOpusEncodeFailed, /* OggOpus编码失败 */ OggOpusDecodeFailed, /* OggOpus解码失败 */ OggOpusStopFailed, /* OggOpus停止失败 */ /* nls client */ EventClientEmpty = 150, /* 主工作线程空指针, 已释放 */ SelectThreadFailed, /* 工作线程选择失败, 未初始化 */ StartCommandFailed = 160, /* 发送start命令失败 */ InvokeStartFailed, /* 请求状态机不对, 导致start失败 */ InvokeSendAudioFailed, /* 请求状态机不对, 导致sendAudio失败 */ InvalidOpusFrameSize, /* opus帧长无效, 默认为640字节 */ InvokeStopFailed, /* 请求状态机不对, 导致stop失败 */ InvokeCancelFailed, /* 请求状态机不对, 导致stop失败 */ InvokeStControlFailed, /* 请求状态机不对, 导致stControl失败 */ InvokeSendTextFailed, /* 请求状态机不对, 导致sendText失败 */ InvokeTimeout, /* 调用超时 */ InvalidStatusWhenReleasing, /* 请求状态机不对, 处于释放阶段 */ /* nls event */ NlsEventEmpty = 200, /* NLS事件为空 */ NewNlsEventFailed, /* 创建NlsEvent失败 */ NlsEventMsgEmpty, /* NLS事件中消息为空 */ InvalidNlsEventMsgType, /* 无效的NLS事件中消息类型 */ InvalidNlsEventMsgStatusCode, /* 无效的NLS事件中消息状态码 */ InvalidNlsEventMsgHeader, /* 无效的NLS事件中消息头 */ /* work thread */ CancelledExitStatus = 250, /* 已调用cancel */ InvalidWorkStatus, /* 无效的工作状态 */ InvalidNodeQueue, /* workThread中NodeQueue无效 */ /* request */ InvalidRequestParams = 300, /* 请求的入参无效 */ RequestEmpty, /* 请求是空指针 */ InvalidRequest, /* 无效的请求 */ SetParamsEmpty, /* 设置传入的参数为空 */ /* websocket */ GetHttpHeaderFailed = 350, /* 获得http头失败 */ HttpGotBadStatus, /* http错误的状态 */ WsResponsePackageFailed, /* 解析websocket返回包失败 */ WsResponsePackageEmpty, /* 解析websocket返回包为空 */ WsRequestPackageEmpty, /* websocket请求包为空 */ UnknownWsFrameHeadType, /* 未知websocket帧头类型 */ InvalidWsFrameHeaderSize, /* 无效的websocket帧头大小 */ InvalidWsFrameHeaderBody, /* 无效的websocket帧头本体 */ InvalidWsFrameBody, /* 无效的websocket帧本体 */ WsFrameBodyEmpty, /* 帧数据为空, 常见为收到了脏数据 */ InvalidWsFrameCloseCode, /* 帧数据收到异常CLOSE_CODE */ /* connect node */ NodeEmpty = 400, /* node为空指针 */ InvaildNodeStatus, /* node所处状态无效 */ GetAddrinfoFailed, /* 通过dns解析地址识别 */ ConnectFailed, /* 联网失败 */ InvalidDnsSource, /* 当前设备无DNS */ ParseUrlFailed, /* 无效url */ SslHandshakeFailed, /* SSL握手失败 */ SslCtxEmpty, /* SSL_CTX未空 */ SslNewFailed, /* SSL_new失败 */ SslSetFailed, /* SSL设置参数失败 */ SslConnectFailed, /* SSL_connect失败 */ SslWriteFailed, /* SSL发送数据失败 */ SslReadSysError, /* SSL接收数据收到SYSCALL错误 */ SslReadFailed, /* SSL接收数据失败 */ SocketFailed, /* 创建socket失败 */ SetSocketoptFailed, /* 设置socket参数失败 */ SocketConnectFailed, /* 进行socket链接失败 */ SocketWriteFailed, /* socket发送数据失败 */ SocketReadFailed, /* socket接收数据失败 */ NlsReceiveFailed = 430, /* NLS接收帧数据失败 */ NlsReceiveEmpty, /* NLS接收帧数据为空 */ ReadFailed, /* 接收数据失败 */ NlsSendFailed, /* NLS发送数据失败 */ NewOutputBufferFailed, /* 创建buffer失败 */ NlsEncodingFailed, /* 音频编码失败 */ EventEmpty, /* event为空 */ EvbufferTooMuch, /* evbuffer中数据太多 */ EvutilSocketFalied, /* evutil设置参数失败 */ InvalidExitStatus, /* 无效的退出状态 */ /* token */ InvalidAkId = 450, /* 阿里云账号ak id无效 */ InvalidAkSecret, /* 阿里云账号ak secret无效 */ InvalidAppKey, /* 项目appKey无效 */ InvalidDomain, /* domain无效 */ InvalidAction, /* action无效 */ InvalidServerVersion, /* ServerVersion无效 */ InvalidServerResource, /* ServerResource无效 */ InvalidRegionId, /* RegionId无效 */ /* file transfer */ InvalidFileLink = 500, /* 无效的录音文件链接 */ ErrorStatusCode, /* 错误的状态码 */ IconvOpenFailed, /* 申请转换描述失败 */ IconvFailed, /* 编码转换失败 */ ClientRequestFaild, /* 账号客户端请求失败 */ /* VipServer Client */ VipClientInitFailed = 550, /* VipServer客户端初始化失败 */ VipClientMergeHostFailed, /* VipServer客户端生成host失败 */ VipClientQueryIpFailed, /* VipServer客户端同步获得IP失败 */ /* connected pool */ ConnectedPoolEmpty = 560, /* 预连接工作线程空指针, 已释放 */ /* 900 - 998 reserved for C# */ NlsMaxErrorCode = 999, }; enum NlsErrorCode { /* * msg: SSL: couldn't create a context! * solution: 建议重新初始化。 */ NewSslCtxFailed = 10000001, /* * msg: return of SSL_read: error:00000000:lib(0):func(0):reason(0) * solution: 建议重新尝试。 * * msg: return of SSL_read: error:140E0197:SSL routines:SSL_shutdown:shutdown * while in init solution: 建议重新尝试。 */ DefaultErrorCode = 10000002, SysErrorCode = 10000003, /* * msg: URL: The url is empty. * solution: 传入的URL为空, 请重新填写正确URL。 */ EmptyUrl = 10000004, /* * msg: Could not parse WebSocket url: * solution: 传入的URL格式错误, 请重新填写正确URL。 */ InvalidWsUrl = 10000005, /* * msg: JSON: Json parse failed. * solution: Json格式异常, 请通过日志查看具体的错误点。 */ JsonStringParseFailed = 10000007, /* * msg: WEBSOCKET: unkown head type. * solution: 联网失败,请检查本机dns解析和URL是否有效。 */ UnknownWsHeadType = 10000008, /* * msg: HTTP: connect failed. * solution: 与云端连接失败,请检查网络后,重试。 */ HttpConnectFailed = 10000009, /* * msg: * solution: 请检查内存是否充足。 */ MemNotEnough = 10000010, /* * msg: connect failed. * solution: 联网失败,请检查本机dns解析和URL是否有效。 */ SysConnectFailed = 10000015, /* * msg: Got bad status host=xxxxx line=HTTP/1.1 403 Forbidden * solution: 链接被拒,请检查账号特别是token是否过期。 */ HttpGotBadStatusWith403 = 10000100, /* * msg: Send timeout. socket error: * solution: * libevent发送event超时,请检查回调中是否有耗时任务,或并发过大导致无法及时处理事件。 */ EvSendTimeout = 10000101, /* * msg: Recv timeout. socket error: * solution: * libevent接收event超时,请检查回调中是否有耗时任务,或并发过大导致无法及时处理事件。 */ EvRecvTimeout = 10000102, /* * msg: Unknown event: * solution: 未知的libevent事件,建议重新尝试。 */ EvUnknownEvent = 10000103, /* * msg: Operation now in progress * solution: 链接正在进行中,建议重新尝试。 */ OpNowInProgress = 10000104, /* * msg: Broken pipe * solution: pipe处理不过来,建议重新尝试。 */ BrokenPipe = 10000105, /* * msg: Gateway:ACCESS_DENIED:The token 'xxx' has expired! * solution: 请更新token。 */ TokenHasExpired = 10000110, /* * msg: Meta:ACCESS_DENIED:The token 'xxx' is invalid! * solution: 请检查token的有效性。 */ TokenIsInvalid = 10000111, /* * msg: Gateway:ACCESS_DENIED:No privilege to this voice! (voice: zhinan, * privilege: 0) solution: 此发音人无权使用。 */ NoPrivilegeToVoice = 10000112, /* * msg: Gateway:ACCESS_DENIED:Missing authorization header! * solution: 请检查账号是否有权限,或并发是否在限度内。 */ MissAuthHeader = 10000113, /* * msg: utf8ToGbk failed * solution: utf8转码失败,常为系统问题,建议重新尝试。 */ Utf8ConvertError = 10000120, SuccessStatusCode = 20000000, CloseCode = 20000000, // get error code from server status code /* * get status code(40000000) from SERVICE * msg: [tts:atom-offline]Client disconnected! * solution: 请再次尝试语音交互请求。 * * msg: Gateway:CLIENT_ERROR:in post * solution: 请再次尝试语音交互请求。 * * msg: text is empty. * solution: 传入的语音合成text为空。 */ ClientError = 40000000, /* * get status code(40000001) from SERVICE * msg: Meta:ACCESS_DENIED:The token 'xxx' is invalid! * solution: 请检查token的有效性。 * * msg: Gateway:ACCESS_DENIED:No privilege to this voice! (voice: zhinan, * privilege: 0) solution: 此发音人无权使用。 * * msg: Gateway:ACCESS_DENIED:Missing authorization header! * solution: 请检查账号是否有权限,或并发是否在限度内。 */ AccessDenied = 40000001, /* * get status code(40000002) from SERVICE * msg: Gateway:MESSAGE_INVALID:Invalid message id 'null'! * solution: 检查发送的消息是否符合要求。 * * msg: Gateway:MESSAGE_INVALID:Missing message header!" * solution:检查发送的消息是否符合要求。 */ MessageInvalid = 40000002, /* * get status code(40000003) from SERVICE * msg: Gateway:PARAMETER_INVALID:appkey not set * solution: 参数无效,appkey未设置。 * * msg: Gateway:PARAMETER_INVALID:Invalid voice name 'xxx'! * solution: 参数无效,发音人无效。 * * msg: Gateway:PARAMETER_INVALID:Invalid appkey * solution: 参数无效,appkey无效。 */ ParameterInvalid = 40000003, /* * get status code(40000004) from SERVICE * msg: Gateway:IDLE_TIMEOUT:Websocket session is idle for too long time! * solution: 长时间未发送指令。 */ SessionIdleTooLongTime = 40000004, /* * get status code(40000005) from SERVICE * msg: Gateway:TOO_MANY_REQUESTS:Too many requests! * solution: 请求数量过多,检查是否超过了并发连接数或者每秒钟请求数。 */ TooManyRequests = 40000005, /* * get status code(40000009) from SERVICE * msg: Too many opus packets per page: max=100, actual=101 * solution: 请求数量过多,检查是否超过了并发连接数或者每秒钟请求数。 */ TooManyOpusPackets = 40000009, /* * get status code(40000010) from SERVICE * msg: Gateway:FREE_TRIAL_EXPIRED:The free trial has expired! * solution: 免费试用已过期,请开通商用。 */ FreeTrialExpired = 40000010, /* * get status code(40010001) from SERVICE * msg: Gateway:NAMESPACE_NOT_FOUND:RESTful url path illegal! * solution: 请检查传入的url。 */ NamespaceNotFound = 40010001, /* * get status code(40010003) from SERVICE * msg: Gateway:DIRECTIVE_INVALID:No text specified! * solution: 无效的语音合成text。 * * msg: Gateway:DIRECTIVE_INVALID:Invalid format 'PCM'! * solution: 无效的PCM格式,请检查此时的数据格式是否为PCM。 * * msg: Gateway:DIRECTIVE_INVALID:Invalid payload for event * 'SpeechLongSynthesizer.StartSynthesis'! solution: 无效的payload。 */ DirectiveInvalid = 40010003, /* * get status code(40010005) from SERVICE * msg: Gateway:TASK_STATE_ERROR:State is not WORKING, empty body data or * appkey illegal, can not handle last content! solution: * 请再次尝试语音交互请求。 */ TaskStateError = 40010005, /* * get status code(40020105) from SERVICE * msg: Meta:APPKEY_NOT_EXIST:Appkey not exist! * solution: appkey不存在, 是否与传入的token归属同一账号。 */ AppkeyNotExist = 40020105, /* * get status code(40020106) from SERVICE * msg: Meta:APPKEY_UID_MISMATCH:Appkey and user mismatch! * solution: 请检查appkey和账号是否一致。 */ AppkeyUidMismatch = 40020106, /* * get status code(40270002) from SERVICE * msg: Silent speech * solution: 传入的是无人声语音。 */ SilentSpeech = 40270002, /* * get status code(41010100) from SERVICE * msg: UNSUPPORTED_FORMAT * solution: 请检查入参。 */ UnsupportedFormat = 41010100, /* * get status code(41010104) from SERVICE * msg: TOO_LONG_SPEECH * solution: 实时语音识别太长(超过2分半), 请适时断句再启动识别。 */ TooLongSpeech = 41010104, /* * get status code(41020001) from SERVICE * msg: TTS:TtsClientError:SetVoice RetCode[2] invalid voice name * solution: 无效的发音人。 * * msg: TTS:TtsClientError:Illegal ssml text * solution: 无效的ssml格式text。 */ TtsClientError = 41020001, /* * get status code(41050002) from SERVICE * msg: FILE_DOWNLOAD_FAILED * solution: */ FileDownloadFailed = 41050002, ConcurrencyExceed = 43040001, /* * get status code(50000000) from SERVICE * msg: Gateway:SERVER_ERROR:Server error! * msg: Gateway:SERVER_ERROR:No endpoint found for service 'jupiter-flow' * msg: Realtime:SERVER_ERROR:Instance pool exhausted! * solution: 请再次尝试语音交互请求。 */ ServerError = 50000000, /* * get status code(50000001) from SERVICE * msg: Gateway:GRPC_ERROR:Grpc error! * solution: 请再次尝试语音交互请求。 */ GrpcError = 50000001, /* * get status code(50020003) from SERVICE * msg: Meta:ROUTE_GROUP_NOT_FOUND:Route group 'xxx' not found! * solution: route group不存在,请再次尝试语音交互请求。 */ RouteGroupNotFound = 50020003, /* * get status code(51020001) from SERVICE * msg: TTS:TtsServerError:[flow]Instance pool exhausted! * solution: 请再次尝试语音交互请求。 * * msg: TTS:TtsServerError:SetVoice RetCode[2] invalid voice name * solution: 请检查发音人是否有效。 * * msg: TTS:TtsServerError:[tts]Failed to invoke * 'jai_stream_producer_start_customized' solution: * 请检查语音合成参数是否有效。 */ TtsServerError = 51020001, }; #endif // NLS_SDK_GLOBAL_H