2 changed files with 124 additions and 0 deletions
@ -0,0 +1,124 @@ |
|||||
|
#include "configs/gconfig.hpp"
|
||||
|
#include "iflytop/components/aiui_ws/aiui_service.hpp"
|
||||
|
#include "iflytop/components/alsaplayer/smart_soundbox_player.hpp"
|
||||
|
#include "iflytop/core/core.hpp"
|
||||
|
#include "iflytoplinuxsdk/src/iflytop/components/zclicpp/clipp.h"
|
||||
|
|
||||
|
using namespace iflytop; |
||||
|
using namespace core; |
||||
|
using namespace std; |
||||
|
using namespace clipp; |
||||
|
|
||||
|
unique_ptr<Thread> m_thread; |
||||
|
/*************************************************************************************/ |
||||
|
shared_ptr<AiuiService> aiuiService; |
||||
|
|
||||
|
void processAIUIRX(json &rxjson) { |
||||
|
auto logger = GET_LOGGER(main); |
||||
|
|
||||
|
string action = rxjson["action"]; |
||||
|
if (action == "started") { |
||||
|
logger->info("rx started:{}", rxjson.dump()); |
||||
|
} |
||||
|
//
|
||||
|
else if (action == "result") { |
||||
|
string sub = rxjson["data"]["sub"]; |
||||
|
if (sub == "nlp") { |
||||
|
logger->info("rx nlp:{}", rxjson.dump()); |
||||
|
} else if (sub == "tts") { |
||||
|
logger->info("rx tts:frame {}", rxjson["data"]["json_args"]["frame_id"].get<int>()); |
||||
|
bool isendFrame = false; |
||||
|
string ttsurl; |
||||
|
aiuiService->parseTTSContent(rxjson, isendFrame, ttsurl); |
||||
|
if (isendFrame) { |
||||
|
logger->info("rx tts end,url={}", ttsurl); |
||||
|
} |
||||
|
} else if (sub == "iat") { |
||||
|
logger->info("rx iat:{}", rxjson.dump()); |
||||
|
} else if (sub == "vad") { |
||||
|
logger->info("rx vad:{}", rxjson.dump()); |
||||
|
} else { |
||||
|
logger->info("rx {}:{}", sub, rxjson.dump()); |
||||
|
} |
||||
|
} |
||||
|
//
|
||||
|
else if (action == "error") { |
||||
|
logger->info("rx error:{}", rxjson.dump()); |
||||
|
} |
||||
|
//
|
||||
|
else if (action == "vad") { |
||||
|
} else { |
||||
|
logger->info("rx unkown:{}", rxjson.dump()); |
||||
|
} |
||||
|
|
||||
|
try { |
||||
|
if (rxjson["data"]["is_finish"].get<bool>()) { |
||||
|
logger->info("end tx"); |
||||
|
} |
||||
|
} catch (...) { |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
int main(int argc, char *argv[]) { |
||||
|
spdlog::flush_on(spdlog::level::debug); |
||||
|
auto logger = GET_LOGGER(main); |
||||
|
|
||||
|
aiuiService = make_shared<AiuiService>(); |
||||
|
|
||||
|
string appid; |
||||
|
string appkey; |
||||
|
string inputwav; |
||||
|
auto cli = ( //
|
||||
|
(value("input wav file", inputwav)), (required("--appid") & value("aiui appid", appid)).doc("aiui appid,find it on https://aiui.xfyun.cn/"), //
|
||||
|
(required("--appkey") & value("aiui appkey", appkey)).doc("aiui appkey,find it on https://aiui.xfyun.cn/") //
|
||||
|
); |
||||
|
if (!parse(argc, argv, cli)) { |
||||
|
cout << make_man_page(cli, argv[0]); |
||||
|
return -1; |
||||
|
} |
||||
|
|
||||
|
json paramj; |
||||
|
paramj["result_level"] = "plain"; |
||||
|
paramj["auth_id"] = "ac30105366ea460f9ff08ddac0c4f71e"; // 相当于设备ID,设备唯一
|
||||
|
paramj["data_type"] = "audio"; |
||||
|
paramj["aue"] = "raw"; |
||||
|
paramj["vad_info"] = "end"; |
||||
|
paramj["cloud_vad_eos"] = "700"; |
||||
|
paramj["close_delay"] = "200"; |
||||
|
paramj["scene"] = "main_box"; |
||||
|
paramj["sample_rate"] = "16000"; |
||||
|
paramj["context"] = R"({"sdk_support":["nlp","tts","vad","iat"]})"; |
||||
|
|
||||
|
aiuiService->initialize(appid, appkey, paramj.dump()); |
||||
|
aiuiService->aiuiInit(); |
||||
|
aiuiService->onMessage.connect([&](json rxjson) { processAIUIRX(rxjson); }); |
||||
|
|
||||
|
/**
|
||||
|
* @brief 读取并发送文件 |
||||
|
*/ |
||||
|
FILE *fp = fopen(inputwav.c_str(), "rb"); |
||||
|
if (!fp) { |
||||
|
printf("cant not find test.pcm !!!\n"); |
||||
|
exit(-1); |
||||
|
} |
||||
|
char buff[1280]; |
||||
|
memset(buff, '\0', 1280); |
||||
|
fread(buff, sizeof(char), 44, fp); |
||||
|
while (fread(buff, sizeof(char), 1280, fp) > 0) { |
||||
|
logger->info("write audio data {}", 1280); |
||||
|
aiuiService->aiuiWrite(buff, 1280); |
||||
|
usleep(40 * 1000); |
||||
|
memset(buff, '\0', 1280); |
||||
|
} |
||||
|
logger->info("write audio data end"); |
||||
|
aiuiService->aiuiFinished(); |
||||
|
fclose(fp); |
||||
|
|
||||
|
sleep(5); |
||||
|
|
||||
|
logger->info("aiui_destroy"); |
||||
|
aiuiService->aiuiDestroy(); |
||||
|
logger->info("aiui_destroy end"); |
||||
|
|
||||
|
while (true) sleep(1000); |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue