跳到主要内容

使用示例

demo示例

windows sdk demo源文件或者可执行程序可以从此处 下载。运行demo前需要更新配置文件asrconfig.json

{
"appid" : "",
"secret" : "",
"wavefile" : "keda.wav"
}

详细的使用方式可以参考demo源码。下面给出关键步骤。

  1. 根据appid和secret生成token用于鉴权
class KAsrSdkToken {
public:
KAsrSdkToken(const std::string &appId, const std::string &appSecret) {
_appId = appId;
_appSecret = appSecret;
}
std::string getToken(int expire, const std::string &userId = "") {
std::string salt = std::to_string(getSalt());
std::string expireTs = std::to_string(getExpireTs(expire));
std::string signature = _appId + userId + salt + expireTs;

unsigned char chTmp[MAX_CHAR_ARRAY] = { 0 };
unsigned int len = 0;
HMAC(EVP_sha256(), _appSecret.c_str(), _appSecret.length(), (unsigned char*)signature.c_str(), signature.length(), chTmp, &len);
signature = mai_common_base64_encode((const char*)chTmp, len);

std::vector<std::string> combineStr;
combineStr.emplace_back(_version);
combineStr.emplace_back(_appId);
combineStr.emplace_back(std::move(salt));
combineStr.emplace_back(std::move(expireTs));
combineStr.emplace_back(std::move(signature));
return mai_common_join_string(combineStr, ":");
}

private:
int getSalt() {
std::default_random_engine engine;
std::uniform_int_distribution<int> uniform(0, MAX_RANDOM_NUMBER);
engine.seed(time(nullptr));
return uniform(engine);
}

int getExpireTs(int expire) {
return time(nullptr) + expire;
}
protected:
std::string _version = "1";
std::string _appId;
std::string _appSecret;
};
  1. 定义自己的回调函数,用于接收语音识别的中间结果或者最终结果。result->fin为0时表示中间结果,为1时表示最终结果。
class MyCallBack : public KASRSDK::KAsrCallback
{
public:
MyCallBack(KASRSDK::KAsrClient *client , HANDLE event){
m_pClient = client;
m_event = event;
}

bool isSuc(){
return m_suc;
}

private:

virtual void onWarning(KASRSDK::ASR_SDK_WARNING warningType, const char* content){
printf("onWarning %d %s \n", warningType, content);
}

virtual void onError(KASRSDK::ASR_SDK_ERROR errorType, const char* content){
printf("onError %d %s \n", errorType, content);
//KASRSDK::destroyAsrInstance(m_pClient);
}

virtual void onRelease(int32_t result){
printf("onRelease %d \n", result);
}

virtual void onStart(int32_t result, const char *sessionId){
printf("onStart %d sessionId:%s \n", result , sessionId);
if (result == 0){
m_suc = true;
}
SetEvent(m_event);
}
virtual void onRecogResult(KASRSDK::KAsrRecogResult *result){
printf("onRecogResult %d : %s \n", result->fin, mai_common_utf8_to_gbk(result->text).c_str());
}
virtual void onStop(int32_t result){
printf("onStop %d \n", result);
}

KASRSDK::KAsrClient *m_pClient;
HANDLE m_event;
bool m_suc = false;
};