### Configure SDK Advanced Settings Source: https://context7.com/aliyun/alibabacloud-nls-cpp-sdk/llms.txt Set SDK configurations like log level, network address family, DNS resolution, pre-connected pool, synchronous call timeout, and direct host for private cloud deployments. Also includes starting worker threads and getting SDK version. ```cpp #include "nlsClient.h" void advancedConfiguration() { AlibabaNls::NlsClient* client = AlibabaNls::NlsClient::getInstance(); // 设置日志级别 (LogError=1, LogWarning=2, LogInfo=3, LogDebug=4) client->setLogConfig("nls-sdk.log", AlibabaNls::LogInfo, 100, 10); // 设置网络地址族 (AF_INET=IPv4, AF_INET6=IPv6, AF_UNSPEC=自动) client->setAddrInFamily("AF_INET"); // 使用系统getaddrinfo解析DNS (部分环境下可解决DNS问题) client->setUseSysGetAddrInfo(true); // 启用预连接池 (可显著降低首包延迟) // 参数: 最大连接数, 连接超时ms, 请求超时ms client->setPreconnectedPool(100, 18000, 7000); // 启用同步调用模式 (start/stop会阻塞直到完成) // 参数: 超时时间ms, 0表示异步模式 client->setSyncCallTimeout(5000); // 私有云部署时直接设置服务器IP // client->setDirectHost("106.15.83.44"); // 启动工作线程 // 高并发(>100)推荐4个线程,单请求推荐1个 // -1表示使用所有CPU核心 client->startWorkThread(4); // 获取SDK版本 std::cout << "SDK版本: " << client->getVersion() << std::endl; // 计算UTF-8字符数 (用于判断文本长度) const char* text = "你好世界"; int charCount = client->calculateUtf8Chars(text); std::cout << "字符数: " << charCount << std::endl; } ``` -------------------------------- ### Real-time Speech Transcription Setup and Usage in C++ Source: https://context7.com/aliyun/alibabacloud-nls-cpp-sdk/llms.txt Demonstrates setting up and using the SpeechTranscriber for real-time audio transcription. Includes callback registration, parameter configuration, audio sending, and cleanup. Ensure correct audio format and sample rate are set. ```cpp #include "nlsClient.h" #include "speechTranscriberRequest.h" // 转写开始回调 void OnTranscriptionStarted(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "实时转写已开始, taskId: " << ev->getTaskId() << std::endl; } // 句子开始回调 void OnSentenceBegin(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "句子" << ev->getSentenceIndex() << "开始" << std::endl; } // 中间结果回调 void OnTranscriptionResultChanged(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "中间结果: " << ev->getResult() << std::endl; } // 句子结束回调 (包含完整句子结果) void OnSentenceEnd(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "句子" << ev->getSentenceIndex() << "结束" << std::endl; std::cout << "识别结果: " << ev->getResult() << std::endl; std::cout << "句子时长: " << ev->getSentenceTime() << "ms" << std::endl; std::cout << "置信度: " << ev->getSentenceConfidence() << std::endl; } // 转写完成回调 void OnTranscriptionCompleted(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "实时转写完成" << std::endl; } // 失败回调 void OnTranscriberTaskFailed(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "转写失败: " << ev->getErrorMessage() << std::endl; } // 通道关闭回调 void OnTranscriberChannelClosed(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "通道已关闭" << std::endl; } void speechTranscriberDemo(const char* appkey, const char* token) { // 创建实时转写请求 AlibabaNls::SpeechTranscriberRequest* request = AlibabaNls::NlsClient::getInstance()->createTranscriberRequest(); // 设置回调函数 request->setOnTranscriptionStarted(OnTranscriptionStarted, NULL); request->setOnSentenceBegin(OnSentenceBegin, NULL); request->setOnTranscriptionResultChanged(OnTranscriptionResultChanged, NULL); request->setOnSentenceEnd(OnSentenceEnd, NULL); request->setOnTranscriptionCompleted(OnTranscriptionCompleted, NULL); request->setOnTaskFailed(OnTranscriberTaskFailed, NULL); request->setOnChannelClosed(OnTranscriberChannelClosed, NULL); // 设置必填参数 request->setAppKey(appkey); request->setToken(token); // 设置音频参数 request->setFormat("pcm"); request->setSampleRate(16000); // 设置可选参数 request->setIntermediateResult(true); // 返回中间结果 request->setPunctuationPrediction(true); // 添加标点 request->setInverseTextNormalization(true); // 数字转换 request->setMaxSentenceSilence(800); // VAD静音阈值(ms) request->setEnableWords(true); // 返回词级别信息 request->setDisfluency(true); // 去除语气词 // 启动实时转写 int ret = request->start(); if (ret < 0) { std::cout << "启动失败: " << ret << std::endl; AlibabaNls::NlsClient::getInstance()->releaseTranscriberRequest(request); return; } // 发送音频数据 (持续发送直到结束) std::ifstream fs("long_audio.wav", std::ios::binary); uint8_t buffer[3200]; while (fs.read((char*)buffer, sizeof(buffer))) { size_t len = fs.gcount(); ret = request->sendAudio(buffer, len, ENCODER_NONE); if (ret < 0) break; usleep(100 * 1000); } fs.close(); // 停止转写 request->stop(); sleep(2); AlibabaNls::NlsClient::getInstance()->releaseTranscriberRequest(request); } ``` -------------------------------- ### Compile and Deploy SDK on Linux Source: https://context7.com/aliyun/alibabacloud-nls-cpp-sdk/llms.txt Commands for compiling the SDK on Linux using CMake, including full and incremental builds for release and debug versions. Also shows the directory structure of compiled artifacts and how to run demo applications. ```bash # Linux编译命令 # 全量编译Release版本,支持C++11 ./scripts/build_linux.sh all release 1 # 增量编译Debug版本 ./scripts/build_linux.sh incr debug # 编译产物目录结构 # NlsSdk3.X_LINUX/ # ├── bin/ # Demo程序 # │ ├── srDemo # 一句话识别Demo # │ ├── stDemo # 实时转写Demo # │ ├── syDemo # 语音合成Demo # │ └── ... # ├── include/ # 头文件 # ├── lib/ # 库文件 # │ ├── libalibabacloud-idst-speech.a # │ └── libalibabacloud-idst-speech.so # └── demo/ # Demo源码 # 运行Demo示例 ./srDemo --appkey your_appkey --token your_token --audioFile test.wav ./syDemo --appkey your_appkey --token your_token --text "你好世界" # 高并发测试 ./srDemo --appkey your_appkey --token your_token \ --threads 100 --time 300 --type opus # 环境变量配置 (可选) export NLS_AK_ENV=your_access_key_id export NLS_SK_ENV=your_access_key_secret export NLS_APPKEY_ENV=your_appkey ``` -------------------------------- ### Implement Speech Synthesis with C++ SDK Source: https://context7.com/aliyun/alibabacloud-nls-cpp-sdk/llms.txt Demonstrates the full lifecycle of a speech synthesis request, including callback registration for audio data and event handling. Ensure the output file stream is properly managed within the channel closed callback to prevent data loss. ```cpp #include "nlsClient.h" #include "speechSynthesizerRequest.h" #include // 合成开始回调 void OnSynthesisStarted(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "语音合成已开始, taskId: " << ev->getTaskId() << std::endl; } // 二进制音频数据接收回调 void OnBinaryDataReceived(AlibabaNls::NlsEvent* ev, void* param) { std::ofstream* ofs = static_cast(param); // 获取音频数据 std::vector data = ev->getBinaryData(); if (!data.empty() && ofs && ofs->is_open()) { ofs->write((char*)data.data(), data.size()); } std::cout << "收到音频数据: " << data.size() << " bytes" << std::endl; } // 合成完成回调 void OnSynthesisCompleted(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "语音合成完成" << std::endl; } // 失败回调 void OnSynthesisTaskFailed(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "合成失败: " << ev->getErrorMessage() << std::endl; } // 通道关闭回调 void OnSynthesisChannelClosed(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "通道已关闭" << std::endl; std::ofstream* ofs = static_cast(param); if (ofs && ofs->is_open()) { ofs->close(); } } // 字幕信息回调 void OnMetaInfo(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "字幕: " << ev->getAllResponse() << std::endl; } void speechSynthesizerDemo(const char* appkey, const char* token) { // 创建语音合成请求 (ShortTts=短文本, LongTts=长文本) AlibabaNls::SpeechSynthesizerRequest* request = AlibabaNls::NlsClient::getInstance()->createSynthesizerRequest( AlibabaNls::ShortTts); // 打开输出文件 std::ofstream audioFile("output.pcm", std::ios::binary); // 设置回调函数 request->setOnSynthesisStarted(OnSynthesisStarted, NULL); request->setOnBinaryDataReceived(OnBinaryDataReceived, &audioFile); request->setOnSynthesisCompleted(OnSynthesisCompleted, NULL); request->setOnTaskFailed(OnSynthesisTaskFailed, NULL); request->setOnChannelClosed(OnSynthesisChannelClosed, &audioFile); request->setOnMetaInfo(OnMetaInfo, NULL); // 设置必填参数 request->setAppKey(appkey); request->setToken(token); request->setText("今天天气真不错,我想去操场踢足球。"); // 设置可选参数 request->setFormat("pcm"); // 音频格式: pcm/wav/mp3 request->setSampleRate(16000); // 采样率 request->setVoice("xiaoyun"); // 发音人 request->setVolume(50); // 音量 (0-100) request->setSpeechRate(0); // 语速 (-500~500) request->setPitchRate(0); // 语调 (-500~500) request->setEnableSubtitle(true); // 启用字幕 // 启动合成 int ret = request->start(); if (ret < 0) { std::cout << "启动失败: " << ret << std::endl; audioFile.close(); AlibabaNls::NlsClient::getInstance()->releaseSynthesizerRequest(request); return; } // 等待合成完成 (通过回调接收音频数据) sleep(5); AlibabaNls::NlsClient::getInstance()->releaseSynthesizerRequest(request); } ``` -------------------------------- ### Compile SDK on Linux Source: https://github.com/aliyun/alibabacloud-nls-cpp-sdk/blob/master/readme.md Use the build_linux.sh script to compile the SDK on Linux platforms. Supports incremental/full builds, debug/release modes, and C++11 ABI configuration. ```bash ./scripts/build_linux.sh ``` ```bash ./scripts/build_linux.sh ``` ```bash ./scripts/build_linux.sh all debug ``` ```bash ./scripts/build_linux.sh incr debug ``` ```bash ./scripts/build_linux.sh all release ``` ```bash ./scripts/build_linux.sh incr release ``` ```bash ./scripts/build_linux.sh all debug 1 ``` ```bash ./scripts/build_linux.sh all debug 1 1 ``` -------------------------------- ### 初始化 SDK 与获取鉴权 Token Source: https://context7.com/aliyun/alibabacloud-nls-cpp-sdk/llms.txt 使用 AccessKey 获取 Token 并初始化 NlsClient。建议缓存 Token 以复用,并根据并发需求启动工作线程。 ```cpp #include "nlsClient.h" #include "nlsToken.h" // 生成鉴权Token int generateToken(std::string akId, std::string akSecret, std::string* token, long* expireTime) { AlibabaNlsCommon::NlsToken nlsTokenRequest; nlsTokenRequest.setAccessKeyId(akId); nlsTokenRequest.setKeySecret(akSecret); int retCode = nlsTokenRequest.applyNlsToken(); if (retCode < 0) { std::cout << "生成Token失败: " << nlsTokenRequest.getErrorMsg() << std::endl; return retCode; } *token = nlsTokenRequest.getToken(); *expireTime = nlsTokenRequest.getExpireTime(); return 0; } int main() { std::string token; long expireTime; // 获取Token (建议缓存复用,不要每次请求都生成) generateToken("your_access_key_id", "your_access_key_secret", &token, &expireTime); // 设置日志 (可选) AlibabaNls::NlsClient::getInstance()->setLogConfig( "log-nls", AlibabaNls::LogInfo, 100, 10); // 启动工作线程 (高并发推荐4, 单请求推荐1) AlibabaNls::NlsClient::getInstance()->startWorkThread(4); // ... 执行语音识别/合成任务 // 释放SDK资源 AlibabaNls::NlsClient::releaseInstance(); return 0; } ``` -------------------------------- ### Compile SDK on Android Source: https://github.com/aliyun/alibabacloud-nls-cpp-sdk/blob/master/readme.md Use the build_android.sh script to compile the SDK for various Android architectures. ```bash ./scripts/build_android.sh ``` ```bash ./scripts/build_android.sh all debug arm64-v8a ``` ```bash ./scripts/build_android.sh incr debug arm64-v8a ``` ```bash ./scripts/build_android.sh all release arm64-v8a ``` ```bash ./scripts/build_android.sh incr release arm64-v8a ``` -------------------------------- ### Implement DashFunAsrTranscriber for Real-time Recognition Source: https://context7.com/aliyun/alibabacloud-nls-cpp-sdk/llms.txt Uses DashFunAsrTranscriberRequest for high-accuracy speech recognition. Requires an API Key for authentication and streaming audio data via sendAudio. ```cpp #include "nlsClient.h" #include "dashFunAsrTranscriberRequest.h" // 任务开始回调 void OnFunAsrTaskStarted(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "Fun-ASR任务开始, taskId: " << ev->getTaskId() << std::endl; } // 结果生成回调 void OnFunAsrResultGenerated(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "识别结果: " << ev->getResult() << std::endl; } // 任务完成回调 void OnFunAsrTaskFinished(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "Fun-ASR任务完成" << std::endl; } // 失败回调 void OnFunAsrTaskFailed(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "失败: " << ev->getErrorMessage() << std::endl; } // 通道关闭回调 void OnFunAsrChannelClosed(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "通道已关闭" << std::endl; } void dashFunAsrDemo(const char* apiKey) { // 创建百炼Fun-ASR请求 AlibabaNls::DashFunAsrTranscriberRequest* request = AlibabaNls::NlsClient::getInstance()->createDashFunAsrTranscriberRequest(); // 设置回调 request->setOnTaskStarted(OnFunAsrTaskStarted, NULL); request->setOnResultGenerated(OnFunAsrResultGenerated, NULL); request->setOnTaskFinished(OnFunAsrTaskFinished, NULL); request->setOnTaskFailed(OnFunAsrTaskFailed, NULL); request->setOnChannelClosed(OnFunAsrChannelClosed, NULL); // 设置参数 (使用API Key鉴权,非Token) request->setApiKey(apiKey); // 百炼平台的API Key request->setFormat("pcm"); request->setSampleRate(16000); // 启动识别 int ret = request->start(); if (ret < 0) { std::cout << "启动失败: " << ret << std::endl; AlibabaNls::NlsClient::getInstance()->releaseDashFunAsrTranscriberRequest(request); return; } // 发送音频数据 std::ifstream fs("test.wav", std::ios::binary); uint8_t buffer[3200]; while (fs.read((char*)buffer, sizeof(buffer))) { request->sendAudio(buffer, fs.gcount(), ENCODER_NONE); usleep(100 * 1000); } fs.close(); request->stop(); sleep(2); AlibabaNls::NlsClient::getInstance()->releaseDashFunAsrTranscriberRequest(request); } ``` -------------------------------- ### 实现一句话识别 (SpeechRecognizer) Source: https://context7.com/aliyun/alibabacloud-nls-cpp-sdk/llms.txt 通过回调函数处理识别事件,并使用 sendAudio 发送音频数据。需注意在识别结束后调用 releaseRecognizerRequest 释放资源。 ```cpp #include "nlsClient.h" #include "speechRecognizerRequest.h" // 识别开始回调 void OnRecognitionStarted(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "识别已开始, taskId: " << ev->getTaskId() << std::endl; } // 识别结果变化回调 (中间结果) void OnRecognitionResultChanged(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "中间结果: " << ev->getResult() << std::endl; } // 识别完成回调 void OnRecognitionCompleted(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "最终结果: " << ev->getResult() << std::endl; std::cout << "全部响应: " << ev->getAllResponse() << std::endl; } // 识别失败回调 void OnRecognitionTaskFailed(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "识别失败: " << ev->getErrorMessage() << ", 状态码: " << ev->getStatusCode() << std::endl; } // 通道关闭回调 void OnRecognitionChannelClosed(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "通道已关闭" << std::endl; } void speechRecognizerDemo(const char* appkey, const char* token) { // 创建一句话识别请求 AlibabaNls::SpeechRecognizerRequest* request = AlibabaNls::NlsClient::getInstance()->createRecognizerRequest(); // 设置回调函数 request->setOnRecognitionStarted(OnRecognitionStarted, NULL); request->setOnRecognitionResultChanged(OnRecognitionResultChanged, NULL); request->setOnRecognitionCompleted(OnRecognitionCompleted, NULL); request->setOnTaskFailed(OnRecognitionTaskFailed, NULL); request->setOnChannelClosed(OnRecognitionChannelClosed, NULL); // 设置必填参数 request->setAppKey(appkey); request->setToken(token); // 设置音频参数 request->setFormat("pcm"); // 音频格式: pcm/opus/opu request->setSampleRate(16000); // 采样率: 16000/8000 // 设置可选参数 request->setIntermediateResult(true); // 返回中间结果 request->setPunctuationPrediction(true); // 添加标点 request->setInverseTextNormalization(true); // 执行ITN (数字转换) // 启动识别 (异步操作) int ret = request->start(); if (ret < 0) { std::cout << "启动失败: " << ret << std::endl; AlibabaNls::NlsClient::getInstance()->releaseRecognizerRequest(request); return; } // 读取并发送音频数据 (模拟从文件读取) std::ifstream fs("test.wav", std::ios::binary); uint8_t buffer[3200]; // 100ms @ 16K采样率 while (fs.read((char*)buffer, sizeof(buffer))) { size_t len = fs.gcount(); // 发送音频: ENCODER_NONE=PCM, ENCODER_OPUS=OPUS压缩 ret = request->sendAudio(buffer, len, ENCODER_NONE); if (ret < 0) { std::cout << "发送失败: " << ret << std::endl; break; } usleep(100 * 1000); // 模拟实时音频,100ms间隔 } fs.close(); // 停止识别,等待最终结果 request->stop(); // 等待closed回调后释放请求 sleep(2); AlibabaNls::NlsClient::getInstance()->releaseRecognizerRequest(request); } ``` -------------------------------- ### Implement FlowingSynthesizer for Streaming TTS Source: https://context7.com/aliyun/alibabacloud-nls-cpp-sdk/llms.txt Uses FlowingSynthesizerRequest to send text in segments and receive real-time audio output. Requires setting up multiple event callbacks to handle the synthesis lifecycle. ```cpp #include "nlsClient.h" #include "flowingSynthesizerRequest.h" // 合成开始回调 void OnFlowingSynthesisStarted(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "流式合成已开始" << std::endl; } // 句子开始回调 void OnFlowingSentenceBegin(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "句子开始" << std::endl; } // 二进制音频数据接收回调 void OnFlowingBinaryDataReceived(AlibabaNls::NlsEvent* ev, void* param) { std::vector data = ev->getBinaryData(); std::cout << "收到音频: " << data.size() << " bytes" << std::endl; // 保存或播放音频数据 } // 句子结束回调 void OnFlowingSentenceEnd(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "句子结束" << std::endl; } // 合成完成回调 void OnFlowingSynthesisCompleted(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "流式合成完成" << std::endl; } // 失败回调 void OnFlowingTaskFailed(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "失败: " << ev->getErrorMessage() << std::endl; } // 通道关闭回调 void OnFlowingChannelClosed(AlibabaNls::NlsEvent* ev, void* param) { std::cout << "通道已关闭" << std::endl; } void flowingSynthesizerDemo(const char* appkey, const char* token) { // 创建流式合成请求 AlibabaNls::FlowingSynthesizerRequest* request = AlibabaNls::NlsClient::getInstance()->createFlowingSynthesizerRequest(); // 设置回调 request->setOnSynthesisStarted(OnFlowingSynthesisStarted, NULL); request->setOnSentenceBegin(OnFlowingSentenceBegin, NULL); request->setOnBinaryDataReceived(OnFlowingBinaryDataReceived, NULL); request->setOnSentenceEnd(OnFlowingSentenceEnd, NULL); request->setOnSynthesisCompleted(OnFlowingSynthesisCompleted, NULL); request->setOnTaskFailed(OnFlowingTaskFailed, NULL); request->setOnChannelClosed(OnFlowingChannelClosed, NULL); // 设置参数 request->setAppKey(appkey); request->setToken(token); request->setFormat("pcm"); request->setSampleRate(16000); request->setVoice("longxiaoxia"); request->setVolume(50); request->setSpeechRate(0); request->setPitchRate(0); request->setEnableSubtitle(true); // 启动流式合成 int ret = request->start(); if (ret < 0) { std::cout << "启动失败: " << ret << std::endl; AlibabaNls::NlsClient::getInstance()->releaseFlowingSynthesizerRequest(request); return; } // 分段发送文本 (模拟LLM输出) request->sendText("今天天气"); usleep(100 * 1000); request->sendText("真不错,"); usleep(100 * 1000); request->sendText("我想去"); usleep(100 * 1000); request->sendText("操场踢足球。"); // 通知文本发送完成,开始合成 request->sendFlush(); // 停止并等待完成 request->stop(); sleep(3); AlibabaNls::NlsClient::getInstance()->releaseFlowingSynthesizerRequest(request); } ``` -------------------------------- ### Handle NlsEvent Events Source: https://context7.com/aliyun/alibabacloud-nls-cpp-sdk/llms.txt Process NlsEvent objects received by callback functions to obtain event type, status code, task ID, results, error messages, sentence information for real-time transcription, and binary audio data for speech synthesis. ```cpp #include "nlsEvent.h" void handleNlsEvent(AlibabaNls::NlsEvent* ev) { // 获取事件类型 AlibabaNls::NlsEvent::EventType type = ev->getMsgType(); std::cout << "事件类型: " << ev->getMsgTypeString() << std::endl; // 获取状态码 (0或20000000表示成功) int statusCode = ev->getStatusCode(); std::cout << "状态码: " << statusCode << std::endl; // 获取任务ID (用于问题定位) const char* taskId = ev->getTaskId(); std::cout << "任务ID: " << taskId << std::endl; // 获取识别/合成结果 const char* result = ev->getResult(); std::cout << "结果: " << result << std::endl; // 获取完整的JSON响应 const char* allResponse = ev->getAllResponse(); std::cout << "完整响应: " << allResponse << std::endl; // 失败时获取错误信息 if (type == AlibabaNls::NlsEvent::TaskFailed) { const char* errorMsg = ev->getErrorMessage(); std::cout << "错误信息: " << errorMsg << std::endl; } // 实时转写时获取句子信息 if (type == AlibabaNls::NlsEvent::SentenceEnd) { int sentenceIndex = ev->getSentenceIndex(); // 句子编号 int sentenceTime = ev->getSentenceTime(); // 句子时长(ms) int beginTime = ev->getSentenceBeginTime(); // 句子开始时间(ms) double confidence = ev->getSentenceConfidence();// 置信度(0.0-1.0) std::cout << "句子" << sentenceIndex << ", 时长: " << sentenceTime << "ms" << ", 置信度: " << confidence << std::endl; } // 语音合成时获取二进制音频数据 if (type == AlibabaNls::NlsEvent::Binary) { std::vector audioData = ev->getBinaryData(); unsigned int dataSize = ev->getBinaryDataSize(); unsigned char* dataPtr = ev->getBinaryDataInChar(); std::cout << "音频数据大小: " << dataSize << " bytes" << std::endl; } } ``` -------------------------------- ### Fix CMake Git Repository Error Source: https://github.com/aliyun/alibabacloud-nls-cpp-sdk/blob/master/readme.md Modify the CMakeLists.txt file to bypass Git versioning errors when compiling from a source zip file. ```cmake exec_program( "git" ${CMAKE_CURRENT_SOURCE_DIR} ARGS "log --format='[sha1]:%h [author]:%cn [time]:%ci [commit]:%s [branch]:%d' -1" OUTPUT_VARIABLE VERSION_SHA1 ) add_definitions(-DGIT_SHA1="\"${VERSION_SHA1}\"") ``` ```cmake add_definitions(-DGIT_SHA1="\"no\"") ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.