diff --git a/.gitignore b/.gitignore index 99d00e8..3156912 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ out .cache ./libs libs/ +buildpc \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 1369e73..d23fa4b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -95,6 +95,8 @@ "rope": "cpp", "slist": "cpp", "scoped_allocator": "cpp", - "netdb.h": "c" + "netdb.h": "c", + "aiui_cjson.h": "c", + "string.h": "c" } } \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index cb8c6a2..68db607 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,12 @@ project(app) set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) +# 如何 BUILD_FOR_TEST_ON_PC == true, 则include cmakepc.cmake +if(BUILD_FOR_TEST_ON_PC) + include(cmakepc.cmake) + return() +endif() + # 设置通用编译选项 set(C_CPP_FLAGS "${C_CPP_FLAGS} ") set(C_CPP_FLAGS @@ -91,7 +97,7 @@ zadd_executable_simple( src/service/voiceprocess/beforewakeup_voiceprocesser.cpp src/service/voiceprocess/voiceprocess_service.cpp src/service/voiceprocess/wakeup_processer.cpp - #aiui + # aiui ) zadd_executable_simple(TARGET alsaplayer_main.out SRC diff --git a/README.md b/README.md index 1443592..a26d51d 100644 --- a/README.md +++ b/README.md @@ -12,10 +12,12 @@ build/ 应用程序编译目录 ## 编译RK3328 ```bash # 初始化环境 -./sh/iflytool.sh envsetup rk3328 +./sh/iflytool.sh envsetup # 仅编译 ./sh/iflytool.sh build +# 编译调试版本,Cmake使用的是cmakepc.cmake +./sh/iflytool.sh buildpc # 编译打包部署(整包) ./sh/iflytool.sh --ip flash diff --git a/cmakepc.cmake b/cmakepc.cmake new file mode 100644 index 0000000..f2a9e07 --- /dev/null +++ b/cmakepc.cmake @@ -0,0 +1,61 @@ +# 设置通用编译选项 +set(C_CPP_FLAGS "${C_CPP_FLAGS} ") +set(C_CPP_FLAGS + "${C_CPP_FLAGS} -Wno-unused-local-typedefs -Wno-unused-but-set-variable -Wno-deprecated-declarations -Wno-unused-variable" +) +set(C_CPP_FLAGS + "${C_CPP_FLAGS} -Wno-unused-local-typedefs -Wno-unused-but-set-variable -Wno-deprecated-declarations -Wno-unused-variable" +) +set(C_CPP_FLAGS + "${C_CPP_FLAGS} -Werror=return-type -Werror=parentheses -Wfatal-errors -Wno-comment" +) +set(C_CPP_FLAGS "${C_CPP_FLAGS} -Wno-format-overflow") +set(C_CPP_FLAGS "${C_CPP_FLAGS} -O0 -g3 -fPIC -Wall") + +# 设置C编译选项 +set(CMAKE_C_FLAGS "${C_CPP_FLAGS}") +message("CMAKE_C_FLAGS : ${CMAKE_C_FLAGS}") + +# 设置CPP编译选项 +set(CMAKE_CXX_FLAGS "${C_CPP_FLAGS}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-pessimizing-move -Wno-reorder") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14") +message("CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}") +message("PROJECT_NAME: ${PROJECT_NAME}") +message("PUBLIC_LINK_DIRECTORIES: ${PUBLIC_LINK_DIRECTORIES}") +message("PUBLIC_INCLUDE_DIRECTORIES: ${PUBLIC_INCLUDE_DIRECTORIES}") + +# 添加相应的依赖代码 +include(dep/iflytopcpp/module.cmake) +include(dep/asio1.12.2/module.cmake) +include(dep/websocketpp/module.cmake) +include(dep/zservice_container/module.cmake) +include(dep/zwebservice/module.cmake) +include(dep/zlinuxcomponents/alsaplayer/module.cmake) +include(dep/zlinuxcomponents/rootfs_auto_update/module.cmake) +include(dep/zlinuxcomponents/mycroft_precise/module.cmake) +include(dep/zlinuxcomponents/audio/module.cmake) +include(dep/zlinuxcomponents/aiui_ws/module.cmake) + +# 设置当前工程依赖的头文件路径和链接的库文件 +set(DEP_LINK_LIBRARIES + ${DEP_LINK_LIBRARIES} + # ffmpeg + avcodec + avdevice + avfilter + avformat + avutil + swresample + swscale + m + # sys + asound + pthread + # + # curlpp curl +) +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) diff --git a/dep/zlinuxcomponents b/dep/zlinuxcomponents index f7277b5..cc20701 160000 --- a/dep/zlinuxcomponents +++ b/dep/zlinuxcomponents @@ -1 +1 @@ -Subproject commit f7277b52ca5ec37ca4de55ac44c8f2d8a5be61ae +Subproject commit cc20701d9b4e719524821a98fb7b0a8334fbe3f9 diff --git a/sh/envsetup_rk3328.sh b/sh/envsetup.sh similarity index 92% rename from sh/envsetup_rk3328.sh rename to sh/envsetup.sh index 0ebbcad..546a759 100755 --- a/sh/envsetup_rk3328.sh +++ b/sh/envsetup.sh @@ -57,8 +57,16 @@ fi echo "PUBLIC_LINK_DIRECTORIES=${PUBLIC_LINK_DIRECTORIES}" echo "PUBLIC_INCLUDE_DIRECTORIES=${PUBLIC_INCLUDE_DIRECTORIES}" -# 构造build.sh +# 构造build/build.sh echo "${CMAKE_BIN} ../ \\" >${PROJECT_PATH}/build/build.sh echo "-DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DPUBLIC_LINK_DIRECTORIES='${PUBLIC_LINK_DIRECTORIES}' \\" >>${PROJECT_PATH}/build/build.sh echo "-DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DPUBLIC_INCLUDE_DIRECTORIES='${PUBLIC_INCLUDE_DIRECTORIES}' \\" >>${PROJECT_PATH}/build/build.sh chmod +x ${PROJECT_PATH}/build/build.sh + +# +# BUILDFORPC +# + +# 构造buildpc/build.sh +echo "${CMAKE_BIN} ../ -DBUILD_FOR_TEST_ON_PC=true \\" >${PROJECT_PATH}/buildpc/build.sh +chmod +x ${PROJECT_PATH}/buildpc/build.sh \ No newline at end of file diff --git a/sh/envsetup_pc.sh b/sh/envsetup_pc.sh deleted file mode 100755 index 38f9b9d..0000000 --- a/sh/envsetup_pc.sh +++ /dev/null @@ -1,5 +0,0 @@ -# 构造build.sh -echo "cmake ../ \\" >${PROJECT_PATH}/build/build.sh -echo "-DCMAKE_C_COMPILER=gcc \\" >>${PROJECT_PATH}/build/build.sh -echo "-DCMAKE_CXX_COMPILER=g++ \\" >>${PROJECT_PATH}/build/build.sh -chmod +x ${PROJECT_PATH}/build/build.sh diff --git a/sh/envsetuppc.sh b/sh/envsetuppc.sh new file mode 100755 index 0000000..59c440a --- /dev/null +++ b/sh/envsetuppc.sh @@ -0,0 +1,11 @@ +cd ${PROJECT_PATH}/buildpc + +wget -c "192.168.1.2:8021/sdk_firefly_rk3328_v2.5.1/buildtools/cmake-3.13.0-Linux-x86_64.tar.gz" +rm -rf cmake-3.13.0-Linux-x86_64 +tar -xvf cmake-3.13.0-Linux-x86_64.tar.gz +mv cmake-3.13.0-Linux-x86_64 cmake +CMAKE_BIN=${PROJECT_PATH}/buildpc/cmake/bin/cmake + +# 构造buildpc/build.sh +echo "${CMAKE_BIN} ../ -DBUILD_FOR_TEST_ON_PC=true " >${PROJECT_PATH}/buildpc/build.sh +chmod +x ${PROJECT_PATH}/buildpc/build.sh diff --git a/sh/iflytool.sh b/sh/iflytool.sh index 4a79928..ee243eb 100755 --- a/sh/iflytool.sh +++ b/sh/iflytool.sh @@ -68,14 +68,13 @@ is_build=false is_flash=false is_reboot=false is_envsetup=false +is_buildpc=false export PROJECT_PATH=$(pwd) for i in "$@"; do case $i in envsetup) - shift # past argument=value - BUILDFOR=$1 is_envsetup=true shift ;; @@ -121,20 +120,25 @@ for i in "$@"; do IP=$1 shift ;; + buildpc) + is_buildpc=true + shift + ;; *) # unknown option ;; + esac done # 判断是否是envsetup if [ "$is_envsetup" = true ]; then - echo "envsetup $BUILDFOR" echo "mkdir -p ${PROJECT_PATH}/build" + echo "mkdir -p ${PROJECT_PATH}/buildpc" mkdir -p ${PROJECT_PATH}/build + mkdir -p ${PROJECT_PATH}/buildpc # 构造环境变量 - echo "BUILDFOR=$BUILDFOR" >${PROJECT_PATH}/build/buildenv #从CmakeLists.txt中读取项目名称 project(app) PROJECT_NAME=$(grep "project(" ${PROJECT_PATH}/CMakeLists.txt) @@ -147,8 +151,10 @@ if [ "$is_envsetup" = true ]; then PROJECT_NAME=${PROJECT_NAME%\)*} echo "PROJECT_NAME=$PROJECT_NAME" >>${PROJECT_PATH}/build/buildenv + echo "PROJECT_NAME=$PROJECT_NAME" >>${PROJECT_PATH}/buildpc/buildenv - ${PROJECT_PATH}/sh/envsetup_${BUILDFOR}.sh + ${PROJECT_PATH}/sh/envsetup.sh + ${PROJECT_PATH}/sh/envsetuppc.sh echo "envsetup success !" exit 0 @@ -196,9 +202,15 @@ if [ "$is_build" = true ]; then ./build.sh && make -j$(nproc) install fi +if [ "$is_buildpc" = true ]; then + echo "buildpc" + cd ${PROJECT_PATH}/buildpc + # 根据当前电脑线程数,调用make + ./build.sh && make -j$(nproc) install +fi + # 打包 if [ "$is_packet" = true ]; then - echo "packet for ${BUILDFOR}" cd ${PROJECT_PATH} ${PROJECT_PATH}/sh/packet.sh fi diff --git a/sh/packet.sh b/sh/packet.sh index 0f00e8d..74b68d8 100755 --- a/sh/packet.sh +++ b/sh/packet.sh @@ -58,9 +58,7 @@ cd $PROJECT_PATH/env/ && cp --path -rf ./* $PACKET_DIR/ wget_and_unzip xiaomaoxiaomao ftp://zftpuser:zftpzwsd@192.168.1.2/zwsd/manufacturer_mycroft/hotworld/xiaomaoxiaomao/xiaomaoxiaomao_module_20220519.tar.gz mv $PACKET_DIR/xiaomaoxiaomao $PACKET_DIR/wakeupmodule # 下载唤醒词引擎 -if [ "$BUILDFOR" == "rk3328" ]; then - wget_and_unzip precise 192.168.1.2:8021/manufacturer_mycroft/mycroft-precise-release/precise-all_0.3.0_aarch64.tar.gz -fi +wget_and_unzip precise 192.168.1.2:8021/manufacturer_mycroft/mycroft-precise-release/precise-all_0.3.0_aarch64.tar.gz # 下载唤醒词语音 wget_and_cpy 192.168.1.2:8021/manufacturer_mycroft/hotworld/xiaomaoxiaomao/test_xiaomaoxiaomao.wav diff --git a/src/service/voiceprocess/asr_service.hpp b/src/service/voiceprocess/asr_service.hpp index e69de29..4f4db02 100644 --- a/src/service/voiceprocess/asr_service.hpp +++ b/src/service/voiceprocess/asr_service.hpp @@ -0,0 +1,53 @@ +// +// Created by zwsd +// + +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "iflytopcpp/core/basic/nlohmann/json.hpp" +#include "iflytopcpp/core/basic/nod/nod.hpp" +#include "iflytopcpp/core/spdlogfactory/logger.hpp" +#include "iflytopcpp/core/thread/thread.hpp" + +/** + * @brief + * + * service: AsrService + * + * 监听事件: + * 依赖状态: + * 依赖服务: + * 作用: + * + */ + +namespace iflytop { +using namespace std; +using namespace core; +using namespace nlohmann; +class AsrService : public enable_shared_from_this { + ENABLE_LOGGER(AsrService); + + public: + nod::signal onAsrResult; + nod::signal onVoiceEnd; + + private: + // + public: + AsrService(){}; + + void initialize(string appid, string key); + void writeVoice(uint16_t* voice, size_t voiceLen); + void writeVoiceEnd(); +}; +} // namespace iflytop \ No newline at end of file