nlsCppSdk/framework/feature/fss/flowingSynthesizerRequest.h (88 lines of code) (raw):

/* * Copyright 2015 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_FLOWING_SYNTHESIZER_REQUEST_H #define NLS_SDK_FLOWING_SYNTHESIZER_REQUEST_H #include "iNlsRequest.h" #include "nlsEvent.h" #include "nlsGlobal.h" #if defined(_MSC_VER) #pragma warning(push) #pragma warning(disable : 4251) #endif namespace AlibabaNls { class FlowingSynthesizerParam; class FlowingSynthesizerCallback { public: FlowingSynthesizerCallback(); ~FlowingSynthesizerCallback(); void setOnTaskFailed(NlsCallbackMethod _event, void* para = NULL); void setOnSynthesisStarted(NlsCallbackMethod _event, void* para = NULL); void setOnSynthesisCompleted(NlsCallbackMethod _event, void* para = NULL); void setOnChannelClosed(NlsCallbackMethod _event, void* para = NULL); void setOnBinaryDataReceived(NlsCallbackMethod _event, void* para = NULL); void setOnSentenceBegin(NlsCallbackMethod _event, void* para = NULL); void setOnSentenceEnd(NlsCallbackMethod _event, void* para = NULL); void setOnSentenceSynthesis(NlsCallbackMethod _event, void* para = NULL); void setOnMessage(NlsCallbackMethod _event, void* para = NULL); NlsCallbackMethod _onTaskFailed; NlsCallbackMethod _onSynthesisStarted; NlsCallbackMethod _onSynthesisCompleted; NlsCallbackMethod _onChannelClosed; NlsCallbackMethod _onBinaryDataReceived; NlsCallbackMethod _onSentenceBegin; NlsCallbackMethod _onSentenceEnd; NlsCallbackMethod _onSentenceSynthesis; NlsCallbackMethod _onMessage; std::map<NlsEvent::EventType, void*> _paramap; }; class NLS_SDK_CLIENT_EXPORT FlowingSynthesizerRequest : public INlsRequest { public: FlowingSynthesizerRequest(const char* sdkName = "cpp", bool isLongConnection = false); ~FlowingSynthesizerRequest(); /** * @brief 设置FlowingSynthesizerRequest服务URL地址 * @note 必填参数. 默认为公网服务URL地址. * @param value 服务url字符串 * @return 成功则返回0,否则返回负值错误码 */ int setUrl(const char* value); /** * @brief 设置appKey * @note 请参照官网申请, 必选参数 * @param value appKey字符串 * @return 成功则返回0,否则返回负值错误码 */ int setAppKey(const char* value); /** * @brief 口令认证。所有的请求都必须通过SetToken方法认证通过,才可以使用 * @note token需要申请获取, 必选参数. * @param value 申请的token字符串 * @return 成功则返回0,否则返回负值错误码 */ int setToken(const char* value); /** * @brief 设置Token的超期时间 * @note 启用预连接池功能才有效, 用于刷新预连接池内部的节点. 如果不设置, * 则按照加入预连接池时间戳+12h为超期时间. * @param value Unix时间戳, 单位ms. 为Token创建时间获得. * @return 成功则返回0,否则返回负值错误码 */ int setTokenExpirationTime(uint64_t value); /** * @brief 音频编码格式Format设置 * @note 可选参数, 默认是pcm. 支持的格式pcm, wav, mp3 * @param value 音频编码格式字符串 * @return 成功则返回0,否则返回负值错误码 */ int setFormat(const char* value); /** * @brief 音频采样率sample_rate设置 * @note 包含8000, 16000.可选参数, 默认是16000 * @param value 音频采样率 * @return 成功则返回0,否则返回负值错误码 */ int setSampleRate(int value); /** * @brief 发音人voice设置 * @note 包含"xiaoyun", "xiaogang". 可选参数, 默认是xiaoyun. * @param value 发音人字符串 * @return 成功则返回0,否则返回负值错误码 */ int setVoice(const char* value); /** * @brief 单次合成的文本。 * @note 调用则启用单轮语音合成, 否则是流式多轮的语音合成. * @param value 待合成的文本, 不超过1万字, 总计不超过10万字, * 其中1个汉字、1个英文字母、1个标点或1个句子中间空格均算作1个字符. * @return 成功则返回0,否则返回负值,查看nlsGlobal.h中错误码详细定位 */ int setSingleRoundText(const char* value); /** * @brief 音量volume设置 * @note 范围是0~100, 可选参数, 默认50 * @param value 音量 * @return 成功则返回0,否则返回负值错误码 */ int setVolume(int value); /** * @brief 语速speech_rate设置 * @note 范围是-500~500, 可选参数, 默认是0 * @param value 语速 * @return 成功则返回0,否则返回负值错误码 */ int setSpeechRate(int value); /** * @brief 语调pitch_rate设置 * @note 范围是-500~500, 可选参数, 默认是0 * @param value 语调 * @return 成功则返回0,否则返回负值错误码 */ int setPitchRate(int value); /** * @brief 是否开启字幕功能 * @param value * @return 成功则返回0,否则返回负值错误码 */ int setEnableSubtitle(bool value); /** * @brief 参数设置 * @note 暂不对外开放 * @param value 参数 * @return 成功则返回0,否则返回负值错误码 */ int setPayloadParam(const char* value); /** * @brief 设置链接超时时间 * @param value 超时时间(ms), 默认500ms. 内部会以value(ms)尝试4次链接. * @return 成功则返回0,否则返回负值错误码 */ int setTimeout(int value); /** * @brief 设置接收超时时间 * @param value 超时时间(ms), 默认15000ms * @return 成功则返回0,否则返回负值错误码 */ int setRecvTimeout(int value); /** * @brief 设置发送超时时间 * @param value 超时时间(ms), 默认5000ms * @return 成功则返回0,否则返回负值错误码 */ int setSendTimeout(int value); /** * @brief 设置输出文本的编码格式 * @note * @param value 编码格式 UTF-8 or GBK * @return 成功则返回0,否则返回负值错误码 */ int setOutputFormat(const char* value); /** * @brief 获得设置的输出文本的编码格式 * @return 返回 UTF-8 or GBK */ const char* getOutputFormat(); /** * @brief 获得当前请求的task_id * @return 返回当前请求的task_id */ const char* getTaskId(); /** * @brief 设置用户自定义参数 * @param value 参数 * @return 成功则返回0,否则返回负值错误码 */ int setContextParam(const char* value); /** * @brief 设置开启服务器返回消息回调 * @param value 默认false, 即默认不开启服务器返回消息回调 * @return 成功则返回0,否则返回负值错误码 */ int setEnableOnMessage(bool value); /** * @brief * 设置是否开启重连续传,需要明确服务是否支持重连续传,否则会导致无法正常抛出异常。 * @param enable 默认false, 是否开启重连续传 * @return 成功则返回0,否则返回负值错误码 */ int setEnableContinued(bool enable); /** * @brief 设置用户自定义ws阶段http header参数 * @param key 参数名称 * @param value 参数内容 * @return 成功则返回0,否则返回负值错误码 */ int AppendHttpHeaderParam(const char* key, const char* value); /** * @brief 启动FlowingSynthesizerRequest * @note 异步操作。成功返回BinaryRecv事件。失败返回TaskFailed事件。 * @return 成功则返回0,否则返回负值错误码 */ int start(); /** * @brief 正常停止FlowingSynthesizerRequest, 表示送完待合成文本, * 开始等待收完所有合成音频。 * @note 异步操作。失败返回TaskFailed。 * @return 成功则返回0,否则返回负值错误码 */ int stop(); /** * @brief 不会与服务端确认关闭,直接关闭语音合成过程 * @note 调用cancel之后不会在上报任何回调事件 * @return 成功则返回0,否则返回负值错误码 */ int cancel(); /** * @brief 需要合成的文本. 不超过1万字, 总计不超过10万字, * 其中1个汉字、1个英文字母、1个标点或1个句子中间空格均算作1个字符. * @note 异步操作。失败返回TaskFailed。 * 在持续发sendPing()的情况下,两次sendText()不超过23秒,否则会收到超时报错。 * 在不发sendPing()的情况下,两次sendText()不超过10秒,否则会收到超时报错。 * @return 成功则返回0,否则返回负值,查看nlsGlobal.h中错误码详细定位 */ int sendText(const char* text); /** * @brief 表示送完待合成文本, 立即开始合成音频。 * @note 异步操作。失败返回TaskFailed。 * @param parameters json格式字符串, 用于传入flush的额外参数 * @return 成功则返回0,否则返回负值错误码 */ int sendFlush(const char* parameters = NULL); /** * @brief 获得当前请求的全部运行信息 * @note *{ * "block": { * // 表示调用了stop, 已经运行了10014ms, 阻塞 * "stop": "running", * "stop_duration_ms": 10014, * "stop_timestamp": "2024-04-26_15:19:44.783" * }, * "callback": { * // 表示回调SentenceBegin阻塞 * "name": "SentenceBegin", * "start": "2024-04-26_15:15:25.607", * "status": "running" * }, * "data": { * "recording_bytes": 183764, * "send_count": 288 * }, * "last": { * "action": "2024-04-26_15:15:30.897", * "send": "2024-04-26_15:15:30.894", * "status": "NodeStop" * }, * "timestamp": { * "create": "2024-04-26_15:15:24.862", * "start": "2024-04-26_15:15:24.862", * "started": "2024-04-26_15:15:25.124", * "stop": "2024-04-26_15:15:30.897" * } *} * @return */ const char* dumpAllInfo(); /** * @brief 设置错误回调函数 * @note 在语音合成过程中出现错误时,sdk内部线程该回调上报. * @param _event 回调方法 * @param para 用户传入参数, 默认为NULL * @return void */ void setOnTaskFailed(NlsCallbackMethod _event, void* para = NULL); /** * @brief 设置语音合成开始回调函数 * @note 在语音合成可以开始时,sdk内部线程该回调上报. * @param _event 回调方法 * @param para 用户传入参数, 默认为NULL * @return void */ void setOnSynthesisStarted(NlsCallbackMethod _event, void* para = NULL); /** * @brief 设置语音合成结束回调函数 * @note 在语音合成完成时,sdk内部线程该回调上报. * @param _event 回调方法 * @param para 用户传入参数, 默认为NULL * @return void */ void setOnSynthesisCompleted(NlsCallbackMethod _event, void* para = NULL); /** * @brief 设置通道关闭回调函数 * @note 语音合成连接通道关闭时,sdk内部线程该回调上报. * @param _event 回调方法 * @param para 用户传入参数, 默认为NULL * @return void */ void setOnChannelClosed(NlsCallbackMethod _event, void* para = NULL); /** * @brief 设置语音合成二进制音频数据接收回调函数 * @note 接收到服务端发送的二进制音频数据时,sdk内部线程上报该回调函数. * @param _event 回调方法 * @param para 用户传入参数, 默认为NULL * @return void * @notice * 切不可在回调中进行阻塞操作,只可做音频数据转存,否则整个流程将会有较大延迟 */ void setOnBinaryDataReceived(NlsCallbackMethod _event, void* para = NULL); /** * @brief 服务端检测到了一句话的开始。 * @note sdk内部线程该回调上报. * @param _event 回调方法 * @param para 用户传入参数, 默认为NULL * @return void */ void setOnSentenceBegin(NlsCallbackMethod _event, void* para = NULL); /** * @brief 服务端检测到了一句话的结束,返回该句的全量时间戳。 * @note sdk内部线程该回调上报. * @param _event 回调方法 * @param para 用户传入参数, 默认为NULL * @return void */ void setOnSentenceEnd(NlsCallbackMethod _event, void* para = NULL); /** * @brief 设置对应结果的信息接收回调函数 * @note * 表示有新的合成结果返回,包含最新的音频和时间戳,句内全量,句间增量,sdk内部线程上报该回调函数. * @param _event 回调方法 * @param para 用户传入参数, 默认为NULL * @return void */ void setOnSentenceSynthesis(NlsCallbackMethod _event, void* para = NULL); /** * @brief 设置服务端response message回调函数 * @note 表示返回所有服务端返回的结果 * @param _event 回调方法 * @param para 用户传入参数, 默认为NULL * @return void */ void setOnMessage(NlsCallbackMethod _event, void* para = NULL); private: FlowingSynthesizerParam* _flowingSynthesizerParam; FlowingSynthesizerCallback* _callback; INlsRequestListener* _listener; }; } // namespace AlibabaNls #if defined(_MSC_VER) #pragma warning(pop) #endif #endif // NLS_SDK_FLOWING_SYNTHESIZER_REQUEST_H