日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

C++ Demo

本文介紹了如何使用阿里云智能語音服務提供的C++ SDK,包括SDK的安裝方法及SDK代碼示例。

前提條件

  • 當前最新版本:1.2.2。發(fā)布日期:2018年11月14日。

  • 使用SDK前,請先閱讀接口說明,詳情請參見接口說明

  • 已開通智能語音交互并獲取AccessKey ID和AccessKey Secret,詳情請參見從這里開始

示例說明

錄音文件識別示例使用了nlsCommonSDK的AlibabaNlsCommon::FileTrans提交識別請求和查詢識別結果,采用的是RPC風格的POP API調(diào)用方式。

下載安裝

下載nlsCommonSDK,文件包含如下幾部分:

  • CMakeLists.txt:示例代碼工程的CMakeList文件。

  • readme.txt:SDK說明。

  • release.log:更新記錄。

  • version:版本號。

  • build.sh:Demo編譯腳本。

  • demo:示例文件。

    文件名

    描述

    fileTransDemo.cpp

    錄音文件識別示例。

  • include:包含SDK頭文件,以及部分第三方頭文件。各文件如下表所示。

    文件名

    描述

    openssl

    OpenSSL頭文件目錄,Linux下使用。

    curl

    curl頭文件目錄。

    uuid

    UUID頭文件目錄,Linux下使用。

    json

    jsoncpp頭文件目錄。

    Global.h

    全局聲明頭文件。

    FileTrans.h

    錄音文件識別頭文件。

  • lib:包含curl、jsoncpp動態(tài)庫。

    根據(jù)平臺不同,使用如下版本軟件加載庫文件:

    • Linux(Glibc:2.5及以上,Gcc4或Gcc5)

    • Windows(VS2013、VS2015)

    編譯運行操作步驟:

    重要

    • Linux下安裝工具要求如下:

      • Glibc 2.5及以上

      • Gcc4或Gcc5

    • Windows下需要您自行搭建示例工程(請將示例文件修改為含有BOM的UTF-8編碼格式),依賴庫如下:

      • openssl-1.0.2j

      • libuuid-1.0.3

      • curl-7.60.0

      • jsoncpp-0.10.6

    假設示例文件已解壓至path/to路徑下,在Linux終端依次執(zhí)行如下命令編譯運行程序。

  • 支持Cmake:

    確認本地系統(tǒng)已安裝Cmake 2.4及以上版本。

    1. 切換目錄:cd path/to/sdk/lib

    2. 解壓縮文件:tar -zxvpf linux.tar.gz

    3. 切換目錄:cd path/to/sdk

    4. 執(zhí)行編譯腳本:./build.sh

    5. 切換目錄:cd path/to/sdk/demo

    6. 執(zhí)行文件識別示例程序:./fileTransDemo your-AccessKeyId your-AccessKeySecret your-appkey

  • 不支持Cmake:

    1. 切換目錄:cd path/to/sdk/lib

    2. 解壓縮文件:tar -zxvpf linux.tar.gz

    3. 切換目錄:cd path/to/sdk/demo

    4. 使用g++編譯命令編譯示例程序:g++ -o fileTransDemo fileTransDemo.cpp -I path/to/sdk/include/ -L path/to/sdk/lib/linux -ljsoncpp -lssl -lcrypto -lcurl -luuid -lalibabacloud-idst-common -D_GLIBCXX_USE_CXX11_ABI=0

    5. 指定庫路徑:export LD_LIBRARY_PATH=path/to/sdk/lib/linux/

    6. 執(zhí)行文件識別示例程序:./fileTransDemo your-AccessKeyId your-AccessKeySecret your-appkey

關鍵接口

FileTrans:錄音文件識別對象。您可以從中獲取錄音文件識別結果、失敗信息等。

代碼示例

說明

下載nls-sample-16k.wav該示例錄音文件為PCM編碼格式16000 Hz采樣率,管控臺設置的模型為通用模型。如果使用其他錄音文件,請?zhí)钊雽木幋a格式和采樣率,并在管控臺設置對應的模型。關于模型設置,請參見管理項目

#include <iostream>
#include <string>
#include "FileTrans.h"

#ifdef _WIN32
#include <windows.h>
#endif // _WIN32

using std::string;
using std::cout;
using std::endl;
using namespace AlibabaNlsCommon;

#if defined _WIN32
string UTF8ToGBK(const string &strUTF8) {

        int len = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, NULL, 0);
        unsigned short * wszGBK = new unsigned short[len + 1];
        memset(wszGBK, 0, len * 2 + 2);

        MultiByteToWideChar(CP_UTF8, 0, (char*)strUTF8.c_str(), -1, (wchar_t*)wszGBK, len);

        len = WideCharToMultiByte(CP_ACP, 0, (wchar_t*)wszGBK, -1, NULL, 0, NULL, NULL);

        char *szGBK = new char[len + 1];
        memset(szGBK, 0, len + 1);
        WideCharToMultiByte(CP_ACP, 0, (wchar_t*)wszGBK, -1, szGBK, len, NULL, NULL);

        string strTemp(szGBK);
        delete[] szGBK;
        delete[] wszGBK;

        return strTemp;
}
#endif

// 錄音文件識別
int fileTrans(const char* accessKeyId, const char* accessKeySecret, const char* appKey, const char* fileLink) {
    FileTrans request;

    /*設置阿里云賬號AccessKey Id*/
    request.setAccessKeyId(accessKeyId);
    /*設置阿里云賬號AccessKey Secret*/
    request.setKeySecret(accessKeySecret);
    /*設置阿里云AppKey*/
    request.setAppKey(appKey);
    /*設置音頻文件url地址*/
    request.setFileLinkUrl(fileLink);
    /*設置閑時版連接域名,這里默填寫的是上海地域,如果要使用其它地域請參考各地域POP調(diào)用參數(shù)*/
    request.setDomain("speechfiletranscriberlite.cn-shanghai.aliyuncs.com");
    /*設置閑時版連接版本*/
    request.setServerVersion("2021-12-21");
    /*設置連接地域*/
    request.setRegionId("cn-shanghai");

    /*開始文件識別, 成功返回0, 失敗返回-1*/
    int ret = request.applyFileTrans();
    if (-1 == ret) {
        cout << "FileTrans failed: " << request.getErrorMsg() << endl; /*獲取失敗原因*/
        return -1;
    } else {
        string result = request.getResult();

#ifdef _WIN32
        result = UTF8ToGBK(result);
#endif

                cout << "FileTrans successed: " << result << endl;

                return 0;
    }
}

int main(int argc, char* argv[]) {
    if (argc < 4) {
        cout << "FileTransDemo need params : <AccessKey Id> <AccessKey Secret> <app - key>" << endl;
        return -1;
    }

    const char* accessKeyId = argv[1];
    const char* accessKeySecret = argv[2];
    const char* appKey = argv[3];
    const char* fileLink = "https://gw.alipayobjects.com/os/bmw-prod/0574ee2e-f494-45a5-820f-63aee583045a.wav";

    fileTrans(accessKeyId, accessKeySecret, appKey, fileLink);

    return 0;
}

常見問題

C++ SDK(3.0及以后版本)使用語音合成和語音識別功能,可以提高GCC5.0以上的編譯版本嗎?

可以。Linux下支持GCC 4.8.5或以上版本。目前已驗證且順利編譯運行的GCC版本包括4.8.5、5.5.0、8.4.0。

為什么連接不到framework?

framework中代碼采用Objective-C和C++混合編寫而成,所以需要使用.mm后綴文件進行調(diào)用,同時請確保工程的頭文件路徑與庫文件路徑設置正確。

SDK報錯“DNS resolved timeout”是什么問題?

查看/etc/resolv.conf文件中nameserver的設置,建議增加并優(yōu)先使用以下配置:nameserver 114.114.114.114

C++ SDK ASR請求有DNS解析失敗的情況導致異常,報錯“ali-recog-skd.log:AliSpeech_C++SDK(ERROR): GetInetAddressByHostname:252 DNS: resolved timeout.ali-recog-skd.log:AliSpeech_C++SDK(ERROR): start:76 start failed: DNS: resolved timeout..unimrcpserver_current.log: [ERROR] [[./ali/AliRecogChannel.cpp:772,onTaskFailed]]Ali Task start failed Msg :DNS: resolved timeout., start finised."”如何解決?

  • 舊版(3.0及以前版本):在高并發(fā)或者電腦DNS忙碌的情況下容易出現(xiàn)以上問題,建議您更新到3.1.X版本,或進行再次重啟請求。

  • 新版(3.0及以后版本):已經(jīng)對此問題進行防御,若仍然偶現(xiàn)此問題,則為電腦DNS忙碌,需要再次重啟請求。

C++ SDK(新)集成到其他項目中時,將CMakeLists.txt中的add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) 修改為add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1)后編譯不通過如何解決?

除了CMakeLists.txt,全工程都需要修改該參數(shù),例如config/linux.thirdparty.debug.cmakeconfig/linux.thirdparty.release.cmake,請在全目錄搜索_GLIBCXX_USE_CXX11_ABI進行修改。

C++ SDK在Windows上使用,報錯缺少nlsCommonSdk.dll如何解決?

3.1及以后版本無nlsCommonSdk.dll。

C++ SDK舊版NlsSdkCpp2.0和新版NlsSdkCpp3.X的區(qū)別是什么?

NlsSdkCpp2.0版本的SDK每一個請求為一個線程,且接口為同步接口。

NlsSdkCpp3.X版本的SDK內(nèi)部由第三方庫libevent統(tǒng)一處理事件消息,并發(fā)性能更強,且接口為異步接口。

C++版的SDK不支持實現(xiàn)C11規(guī)范嗎? 現(xiàn)在導致項目無法鏈接SDK該如何解決?

工程默認為_GLIBCXX_USE_CXX11_ABI=0,全工程都需要修改該參數(shù),請在全目錄搜索_GLIBCXX_USE_CXX11_ABI進行修改。

C++ SDK測試Demo成功,集成項目報錯,DNS解析失敗,報錯“nls-gateway-cn-shanghai.aliyuncs.com dns failed: nodename nor servname provided, or not known”如何解決?

  1. SDK中會查看當前設備開啟的所有協(xié)議族(IPv4、IPv6)進行DNS解析請求,nls-gateway-cn-shanghai.aliyuncs.com不支持 IPv6,返回解析錯誤,從而導致SDK DNS解析失敗退出。可禁用當前設備的IPv6協(xié)議族,后續(xù)CppSdk產(chǎn)品改進對這方面進行可配置處理。

  2. 建議您升級到3.1.12及以后版本。

C++ SDK測試Demo可以成功,集成項目報錯,網(wǎng)絡鏈接失敗,報錯“[dnsEventCallback:465]Node:0x7f087c001030 ai_canonname: nls-gateway-cn-shanghai.aliyuncs.com.gds.alibabadns.com[dnsEventCallback:477]Node:0x7f087c001030 IpV4:106.15.XX.XX[connectProcess:1329]Node:0x7f087c001030 sockFd:41[connectProcess:1347]Node:0x7f087c001030 new Socket ip:106.15.XX.XX port:443 Fd:41.[socketConnect:1458]Node:0x7f087c001030 Connect failed:Network is unreachable. retry...”如何解決?

以上現(xiàn)象為無法連接網(wǎng)絡,查看日志發(fā)現(xiàn)DNS域名解析出來的IP鏈接不成功,進一步通過Ping判斷網(wǎng)絡不通。由于本地攔截DNS解析,導致SDK內(nèi)部libeventevdns_getaddrinfo獲得錯誤的IP。

解決辦法:

  • 3.1.12版本以前可將evdns_getaddrinfo()手動替換成系統(tǒng)的getaddrinfo()。

  • 3.1.12版本可在CMakeLists.txt中修改add_definitions(-DNLS_USE_NATIVE_GETADDRINFO)

  • 3.1.12及以后版本增加setDirectHost()接口,您可以在SDK外部進行DNS解析,獲取正確IP后通過該接口設入。

  • 3.1.13及以后版本已解決此問題,若運行時仍存在上述問題,建議調(diào)用接口setUseSysGetAddrInfo(true)。

C++ SDK語音合成時傳入的文本沒有采用UTF-8編碼會有什么錯誤信息?

如果傳入的文本沒有采用UTF-8編碼,在文本中含有中文字符時,語音合成SDK調(diào)用start函數(shù)會失敗,返回錯誤信息Socket recv failed, errorCode: 0。錯誤碼為0表示服務端已經(jīng)關閉了連接,此時應檢查傳入的文本是否采用UTF-8編碼。