nlsCppSdk/framework/feature/st/speechTranscriberRequest.h (93 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_SPEECH_TRANSCRIBER_REQUEST_H
#define NLS_SDK_SPEECH_TRANSCRIBER_REQUEST_H
#include "iNlsRequest.h"
#include "nlsEvent.h"
#include "nlsGlobal.h"
namespace AlibabaNls {
class SpeechTranscriberParam;
class SpeechTranscriberCallback {
public:
SpeechTranscriberCallback();
~SpeechTranscriberCallback();
void setOnTaskFailed(NlsCallbackMethod _event, void* para = NULL);
void setOnTranscriptionStarted(NlsCallbackMethod _event, void* para = NULL);
void setOnSentenceBegin(NlsCallbackMethod _event, void* para = NULL);
void setOnTranscriptionResultChanged(NlsCallbackMethod _event,
void* para = NULL);
void setOnSentenceEnd(NlsCallbackMethod _event, void* para = NULL);
void setOnTranscriptionCompleted(NlsCallbackMethod _event, void* para = NULL);
void setOnChannelClosed(NlsCallbackMethod _event, void* para = NULL);
void setOnSentenceSemantics(NlsCallbackMethod _event, void* para);
void setOnMessage(NlsCallbackMethod _event, void* para = NULL);
NlsCallbackMethod _onSentenceSemantics;
NlsCallbackMethod _onTaskFailed;
NlsCallbackMethod _onTranscriptionStarted;
NlsCallbackMethod _onSentenceBegin;
NlsCallbackMethod _onTranscriptionResultChanged;
NlsCallbackMethod _onSentenceEnd;
NlsCallbackMethod _onTranscriptionCompleted;
NlsCallbackMethod _onChannelClosed;
NlsCallbackMethod _onMessage;
std::map<NlsEvent::EventType, void*> _paramap;
};
class NLS_SDK_CLIENT_EXPORT SpeechTranscriberRequest : public INlsRequest {
public:
SpeechTranscriberRequest(const char* sdkName = "cpp",
bool isLongConnection = false);
~SpeechTranscriberRequest();
/**
* @brief 设置实时音频流识别服务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 设置音频数据编码格式
* @note 可选参数,目前支持pcm, opus. 默认是pcm
* @param value 音频数据编码字符串
* @return 成功则返回0,否则返回负值错误码
*/
int setFormat(const char* value);
/**
* @brief 设置音频数据采样率sample_rate
* @note 可选参数,目前支持16000, 8000. 默认是1600
* @param value
* @return 成功则返回0,否则返回负值错误码
*/
int setSampleRate(int value);
/**
* @brief 设置是否返回中间识别结果
* @note 可选参数. 默认false
* @param value true 或 false
* @return 成功则返回0,否则返回负值错误码
*/
int setIntermediateResult(bool value);
/**
* @brief 设置是否在后处理中添加标点
* @note 可选参数. 默认false
* @param value true 或 false
* @return 成功则返回0,否则返回负值错误码
*/
int setPunctuationPrediction(bool value);
/**
* @brief 设置是否在后处理中执行数字转换
* @note 可选参数. 默认false
* @param value true 或 false
* @return 成功则返回0,否则返回负值错误码
*/
int setInverseTextNormalization(bool value);
/**
* @brief 设置是否使用语义断句
* @note 可选参数. 默认false. 如果使用语义断句, 则vad断句设置不会生效.
* 两者为互斥关系.
* @param value true 或 false
* @return 成功则返回0,否则返回负值错误码
*/
int setSemanticSentenceDetection(bool value);
/**
* @brief 设置vad阀值
* @note 可选参数. 静音时长超过该阈值会被认为断句,
* 合法参数范围200~6000(ms), 默认值800ms.
* vad断句与语义断句为互斥关系, 不能同时使用.
* 调用此设置前,
* 请将语义断句setSemanticSentenceDetection设置为false.
* @param value vad阀值
* @return 成功则返回0,否则返回负值错误码
*/
int setMaxSentenceSilence(int value);
/**
* @brief 设置定制模型
* @param value 定制模型id字符串
* @return 成功则返回0,否则返回负值错误码
*/
int setCustomizationId(const char* value);
/**
* @brief 设置泛热词
* @param value 定制泛热词id字符串
* @return 成功则返回0,否则返回负值错误码
*/
int setVocabularyId(const char* value);
/**
* @brief 设置链接超时时间
* @param value 超时时间(ms), 默认500ms. 内部会以value(ms)尝试4次链接.
* @return 成功则返回0,否则返回负值错误码
*/
int setTimeout(int value);
/**
* @brief 设置开启接收超时时间
* @param value 默认false, 即默认关闭接收超时时间,
* 开启后长时间未收服务端则报错
* @return 成功则返回0,否则返回负值错误码
*/
int setEnableRecvTimeout(bool value);
/**
* @brief 设置接收超时时间
* @param value 超时时间(ms), 默认15000ms
* @return 成功则返回0,否则返回负值错误码
*/
int setRecvTimeout(int value);
/**
* @brief 设置发送超时时间
* @param value 超时时间(ms), 默认5000ms
* @return 成功则返回0,否则返回负值错误码
*/
int setSendTimeout(int value);
/**
* @brief 设置是否开启nlp服务
* @param enable 是否开启nlp服务
* @return 成功则返回0,否则返回负值错误码
*/
int setEnableNlp(bool enable);
/**
* @brief 设置nlp模型名称,开启NLP服务后必填
* @param value nlp模型名称字符串
* @return 成功则返回0,否则返回负值错误码
*/
int setNlpModel(const char* value);
/**
* @brief 设置session id
* @note 用于请求异常断开重连时,服务端识别是同一个会话。
* @param value session id 字符串
* @return 成功则返回0,否则返回负值错误码
*/
int setSessionId(const char* value);
/**
* @brief 设置输出文本的编码格式
* @note 暂不支持, 输出均为UTF-8
* @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 参数设置
* @note 暂不对外开放
* @param value 参数
* @return 成功则返回0,否则返回负值错误码
*/
int setPayloadParam(const char* value);
/**
* @brief 设置用户自定义参数
* @param value 参数
* @return 成功则返回0,否则返回负值错误码
*/
int setContextParam(const char* value);
/**
* @brief 是否开启返回词信息, 默认是False
* @param enable 是否开启返回词信息
* @return 成功则返回0,否则返回负值错误码
*/
int setEnableWords(bool enable);
/**
* @brief 是否忽略实时识别中的单句识别超时, 默认是False
* @param enable 是否忽略实时识别中的单句识别超时
* @return 成功则返回0,否则返回负值错误码
*/
int setEnableIgnoreSentenceTimeout(bool enable);
/**
* @brief 是否对识别文本进行顺滑(去除语气词,重复说等), 默认是False
* @param enable 是否对识别文本进行顺滑
* @return 成功则返回0,否则返回负值错误码
*/
int setDisfluency(bool enable);
/**
* @brief 噪音参数阈值,参数范围:[-1,1]
*
* @param value 取值越趋于-1, 噪音被判定为语音的概率越大
* 取值越趋于+1, 语音被判定为噪音的概率越大
* 该参数属高级参数, 调整需慎重并重点测试
* @return 成功则返回0,否则返回负值错误码
*/
int setSpeechNoiseThreshold(float value);
/**
* @brief 设置开启服务器返回消息回调。听悟实时推流功能请开启此功能。
* @param value 默认false, 即默认不开启服务器返回消息回调
* @return 成功则返回0,否则返回负值错误码
*/
int setEnableOnMessage(bool enable);
/**
* @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 启动实时音频流识别
* @note 异步操作。成功返回started事件。失败返回TaskFailed事件。
* @return 成功则返回0,否则返回负值,查看nlsGlobal.h中错误码详细定位
*/
int start();
/**
* @brief 要求服务端更新识别参数
* @note 异步操作。失败返回TaskFailed。
* @param message 具体payload和context消息内容, 例如"payload":{内容},
* "context":{内容}
* @param name 需要设置的header name, 设置"header":{"name":name},
* 空则用默认name
* @return 成功则返回0,否则返回负值,查看nlsGlobal.h中错误码详细定位
*/
int control(const char* message, const char* name = "");
/**
* @brief 会与服务端确认关闭,正常停止实时音频流识别操作
* @note 异步操作。失败返回TaskFailed。
* @return 成功则返回0,否则返回负值,查看nlsGlobal.h中错误码详细定位
*/
int stop();
/**
* @brief 直接关闭实时音频流识别过程
* @note 调用cancel之后不会在上报任何回调事件
* @return 成功则返回0,否则返回负值,查看nlsGlobal.h中错误码详细定位
*/
int cancel();
/**
* @brief 发送语音数据
* @note 异步操作。request
* @param data 语音数据
* @param dataSize 语音数据长度(建议每次100ms左右数据, 且推荐少于16K字节)
* @param type ENCODER_NONE 表示原始音频进行传递,
建议每次100ms音频数据,支持16K和8K;
ENCODER_OPU 表示以定制OPUS压缩后进行传递,
建议每次大于20ms音频数据(即大于640bytes),
格式要求16K16b1c ENCODER_OPUS 表示以OPUS压缩后进行传递, 强烈建议使用此类型,
建议每次大于20ms音频数据(即大于640/320bytes),
支持16K16b1c和8K16b1c
* @return
成功则返回字节数(可能为0,即留下包音频数据再发送),失败返回负值,查看nlsGlobal.h中错误码详细定位。
*/
int sendAudio(const uint8_t* data, size_t dataSize,
ENCODER_TYPE type = ENCODER_NONE);
/**
* @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 setOnTranscriptionStarted(NlsCallbackMethod _event, void* para = NULL);
/**
* @brief 设置一句话开始回调
* @note 检测到一句话的开始时, sdk内部线程上报该回调.
* @param _event 回调方法
* @param para 用户传入参数, 默认为NULL
* @return void
*/
void setOnSentenceBegin(NlsCallbackMethod _event, void* para = NULL);
/**
* @brief 设置实时音频流识别中间结果回调函数
* @note 设置enable_intermediate_result字段为true,才会有中间结果.
* @param _event 回调方法
* @param para 用户传入参数, 默认为NULL
* @return void
*/
void setOnTranscriptionResultChanged(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 setOnTranscriptionCompleted(NlsCallbackMethod _event, void* para = NULL);
/**
* @brief 设置通道关闭回调函数
* @note 在请求过程中通道关闭时,sdk内部线程上报该回调.
* @param _event 回调方法
* @param para 用户传入参数, 默认为NULL
* @return void
*/
void setOnChannelClosed(NlsCallbackMethod _event, void* para = NULL);
/**
* @brief 设置二次处理结果回调函数
* @note 表示对实时转写的原始结果进行处理后的结果, 开启enable_nlp后返回
* @param _event 回调方法
* @param para 用户传入参数, 默认为NULL
* @return void
*/
void setOnSentenceSemantics(NlsCallbackMethod _event, void* para = NULL);
/**
* @brief 设置服务端response message回调函数
* @note 表示返回所有服务端返回的结果
* @param _event 回调方法
* @param para 用户传入参数, 默认为NULL
* @return void
*/
void setOnMessage(NlsCallbackMethod _event, void* para = NULL);
private:
SpeechTranscriberParam* _transcriberParam;
SpeechTranscriberCallback* _callback;
INlsRequestListener* _listener;
};
} // namespace AlibabaNls
#endif // NLS_SDK_SPEECH_TRANSCRIBER_REQUEST_H