nlsCppSdk/framework/feature/sy/speechSynthesizerRequest.h (81 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_SPEECH_SYNTHESIZER_REQUEST_H #define NLS_SDK_SPEECH_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 SpeechSynthesizerParam; class SpeechSynthesizerCallback { public: SpeechSynthesizerCallback(); ~SpeechSynthesizerCallback(); 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 setOnMetaInfo(NlsCallbackMethod _event, void* para = NULL); void setOnMessage(NlsCallbackMethod _event, void* para = NULL); NlsCallbackMethod _onTaskFailed; NlsCallbackMethod _onSynthesisStarted; NlsCallbackMethod _onSynthesisCompleted; NlsCallbackMethod _onChannelClosed; NlsCallbackMethod _onBinaryDataReceived; NlsCallbackMethod _onMetaInfo; NlsCallbackMethod _onMessage; std::map<NlsEvent::EventType, void*> _paramap; }; class NLS_SDK_CLIENT_EXPORT SpeechSynthesizerRequest : public INlsRequest { public: SpeechSynthesizerRequest(int version = 0, const char* sdkName = "cpp", bool isLongConnection = false); ~SpeechSynthesizerRequest(); /** * @brief 设置SpeechSynthesizer服务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 待合成音频文本内容text设置 * @note 必选参数,需要传入UTF-8编码的文本内容 * 短文本语音合成模式下(默认), 支持一次性合成300字符以内的文字, * 其中1个汉字、1个英文字母或1个标点均算作1个字符, * 超过300个字符的内容将会报错(或者截断). * 超过300个字符可考虑长文本语音合成, 详见官方文档. * @param value 待合成文本字符串 * @return 成功则返回0,否则返回负值错误码 */ int setText(const char* value); /** * @brief 发音人voice设置 * @note 包含"xiaoyun", "xiaogang". 可选参数, 默认是xiaoyun. * @param value 发音人字符串 * @return 成功则返回0,否则返回负值错误码 */ int setVoice(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 合成方法method设置 * @note 可选参数, 默认是0. * 0 统计参数合成: * 基于统计参数的语音合成,优点是能适应的韵律特征的范围较宽,合成器比特率低,资源占用小,性能高,音质适中 * 1 波形拼接合成: * 基于高质量音库提取学习合成,资源占用相对较高,音质较好,更加贴近真实发音,但没有参数合成稳定 * @param value 语调 * @return 成功则返回0,否则返回负值错误码 */ int setMethod(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 启动SpeechSynthesizerRequest * @note 异步操作。成功返回BinaryRecv事件。失败返回TaskFailed事件。 * @return 成功则返回0,否则返回负值错误码 */ int start(); /** * @brief 此接口废弃,调用与否都会正常停止SpeechSynthesizerRequest链接操作 * @note 异步操作。失败返回TaskFailed。 * @return 成功则返回0,否则返回负值错误码 */ int stop(); /** * @brief 不会与服务端确认关闭,直接关闭语音合成过程 * @note 调用cancel之后不会在上报任何回调事件 * @return 成功则返回0,否则返回负值错误码 */ int cancel(); /** * @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 setOnMetaInfo(NlsCallbackMethod _event, void* para = NULL); /** * @brief 设置服务端response message回调函数 * @note 表示返回所有服务端返回的结果 * @param _event 回调方法 * @param para 用户传入参数, 默认为NULL * @return void */ void setOnMessage(NlsCallbackMethod _event, void* para = NULL); private: SpeechSynthesizerParam* _synthesizerParam; SpeechSynthesizerCallback* _callback; INlsRequestListener* _listener; }; } // namespace AlibabaNls #if defined(_MSC_VER) #pragma warning(pop) #endif #endif // NLS_SDK_SPEECH_SYNTHESIZER_REQUEST_H