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