From 4af621289c0e5a0fc9dea44112247efaf3550839 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Tue, 7 Mar 2023 21:14:29 +0800 Subject: [PATCH] update zlinuxcomponents --- CMakeLists.txt | 1 + cmakepc.cmake | 2 + dep/zlinuxcomponents | 2 +- src/service/voiceprocess/asr_service.cpp | 43 ++++++++++++++++++++ src/service/voiceprocess/asr_service.hpp | 26 ++++++++++++- src/test_asr_main.cpp | 67 ++++++++++++++++++++++++++++++++ 6 files changed, 138 insertions(+), 3 deletions(-) create mode 100644 src/test_asr_main.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 68db607..a31c082 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -104,3 +104,4 @@ zadd_executable_simple(TARGET alsaplayer_main.out SRC dep/zlinuxcomponents/alsaplayer/alsaplayer_main.cpp) zadd_executable_simple(TARGET audio_recorder_main.out SRC dep/zlinuxcomponents/audio/audio_recorder_main.cpp) +zadd_executable_simple(TARGET test_asr_main.out SRC dep/zlinuxcomponents/aiui_ws/aiui_main.c) diff --git a/cmakepc.cmake b/cmakepc.cmake index f2a9e07..25ed690 100644 --- a/cmakepc.cmake +++ b/cmakepc.cmake @@ -59,3 +59,5 @@ zadd_executable_simple(TARGET alsaplayer_main.out SRC dep/zlinuxcomponents/alsaplayer/alsaplayer_main.cpp) zadd_executable_simple(TARGET audio_recorder_main.out SRC dep/zlinuxcomponents/audio/audio_recorder_main.cpp) +zadd_executable_simple(TARGET test_asr_main.out SRC src/test_asr_main.cpp) +zadd_executable_simple(TARGET aiui_main.out SRC dep/zlinuxcomponents/aiui_ws/aiui_main.c) \ No newline at end of file diff --git a/dep/zlinuxcomponents b/dep/zlinuxcomponents index cc20701..2344b60 160000 --- a/dep/zlinuxcomponents +++ b/dep/zlinuxcomponents @@ -1 +1 @@ -Subproject commit cc20701d9b4e719524821a98fb7b0a8334fbe3f9 +Subproject commit 2344b60385743afbe743660579ee72e8e9760552 diff --git a/src/service/voiceprocess/asr_service.cpp b/src/service/voiceprocess/asr_service.cpp index e69de29..baf3e5a 100644 --- a/src/service/voiceprocess/asr_service.cpp +++ b/src/service/voiceprocess/asr_service.cpp @@ -0,0 +1,43 @@ +#include "asr_service.hpp" + +#include "zlinuxcomponents/aiui_ws/aiui.h" +using namespace iflytop; +using namespace core; +using namespace std; + +static AiuiService *thisClass = nullptr; + +void aiui_message_cb(const char *data, int len) { + if (thisClass) { + thisClass->call_aiui_message_cb(data, len); + } +} +void aiui_error_cb(int code, const char *str) { + if (thisClass) { + thisClass->call_aiui_error_cb(code, str); + } +} +AiuiService::AiuiService() { thisClass = this; } +int AiuiService::aiuiInit(const char *appid, const char *key, const char *param) { + thisClass = this; + return aiui_init(appid, key, param, aiui_message_cb, aiui_error_cb); +} +int AiuiService::aiuiWrite(const char *audio, int len) { return aiui_write(audio, len); } +int AiuiService::aiuiFinished() { return aiui_finished(); } +void AiuiService::aiuiDestroy() { + aiui_destroy(); + thisClass = nullptr; +} + +void AiuiService::call_aiui_message_cb(const char *data, int len) { + try { + json j = json::parse(data); + onAsrResult(j); + } catch (const std::exception &e) { + logger->error("AiuiService::call_aiui_message_cb error: {}", e.what()); + } +} +void AiuiService::call_aiui_error_cb(int code, const char *str) { + logger->error("AiuiService::call_aiui_error_cb error: {} => {}", code, str); + onError(code, str); +} \ No newline at end of file diff --git a/src/service/voiceprocess/asr_service.hpp b/src/service/voiceprocess/asr_service.hpp index 4f4db02..2092b58 100644 --- a/src/service/voiceprocess/asr_service.hpp +++ b/src/service/voiceprocess/asr_service.hpp @@ -34,11 +34,30 @@ namespace iflytop { using namespace std; using namespace core; using namespace nlohmann; + +class AiuiService : public enable_shared_from_this { + ENABLE_LOGGER(AiuiService); + + public: + nod::signal onAsrResult; + nod::signal onError; + + AiuiService(); + + int aiuiInit(const char *appid, const char *key, const char *param); + int aiuiWrite(const char *audio, int len); + int aiuiFinished(); + void aiuiDestroy(); + + void call_aiui_message_cb(const char *data, int len); + void call_aiui_error_cb(int code, const char *str); +}; + class AsrService : public enable_shared_from_this { ENABLE_LOGGER(AsrService); public: - nod::signal onAsrResult; + nod::signal onAsrResult; nod::signal onVoiceEnd; private: @@ -47,7 +66,10 @@ class AsrService : public enable_shared_from_this { AsrService(){}; void initialize(string appid, string key); - void writeVoice(uint16_t* voice, size_t voiceLen); + void startRequest(); + void endRequest(); + void writeVoice(uint16_t *voice, size_t voiceLen); + void writeVoice(string text); void writeVoiceEnd(); }; } // namespace iflytop \ No newline at end of file diff --git a/src/test_asr_main.cpp b/src/test_asr_main.cpp new file mode 100644 index 0000000..2ea5012 --- /dev/null +++ b/src/test_asr_main.cpp @@ -0,0 +1,67 @@ +#include "zlinuxcomponents/zmainhelper.hpp" +// +#include "configs/config.hpp" +#include "iflytopcpp/core/spdlogfactory/logger.hpp" +#include "iflytopcpp/core/thread/thread.hpp" +#include "spdlog/spdlog.h" +#include "version.hpp" +#include "zlinuxcomponents/rootfs_auto_update/rootfs_auto_update.hpp" +#include "zservice_container/zservice_container.hpp" +#include "zwebservice/zwebservice.hpp" +// +#include "service/device_io_service.hpp" +#include "service/device_io_service_mock.hpp" +#include "service/light_control_service.hpp" +#include "service/main_control_service.hpp" +#include "service/report_service.hpp" +// +#include "zlinuxcomponents/alsaplayer/AudioPlayerAlsaImpl.hpp" +// #include "zlinuxcomponents/audio/audio_recoder.hpp" +#include + +#include +#include + +#include "zlinuxcomponents/aiui_ws/aiui.h" + +// +using namespace iflytop; +using namespace core; +using namespace std; +using namespace clipp; + +ZMAIN(); +/*********************************************************************************************************************** + * =======================================================Main======================================================== * + ***********************************************************************************************************************/ +static void onmessage(const char *data, int len) {} +static void onerror(int code, const char *str) { printf("aiui_init onerror %d => %s\n", code, str); } + +void Main::onSIGINT() { exit(0); } + +int Main::main(int argc, char *argv[]) { + string g_host_server_ip; + string g_device_id; + spdlog::flush_on(spdlog::level::debug); + + const char *appid = "5938b7c7"; // 应用ID,在AIUI开放平台创建并设置 + const char *key = "19c1f7becc78eedc7826b485aabe30de"; // 接口密钥,在AIUI开放平台查看 + + const char *param = + "{\"result_level\":\"plain\",\"auth_id\":\"ac30105366ea460f9ff08ddac0c4f71e\",\"data_" + "type\":\"text\"," + "\"scene\":\"main_box\",\"sample_rate\":\"16000\", " + "\"context\":\"{\\\"sdk_support\\\":[\\\"nlp\\\",\\\"tts\\\"]}\"}"; + + aiui_init(appid, key, param, onmessage, onerror); + + const char *text = "播放音乐"; + + aiui_write(text, strlen(text)); + + aiui_finished(); + + aiui_destroy(); + + while (true) sleep(1000); +}