From 04375c8a5a27381c28f22afd30c04f377c6d0a41 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Tue, 7 Mar 2023 19:20:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=96=E8=AF=91=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=EF=BC=8C=E6=94=AF=E6=8C=81=E7=BC=96=E8=AF=91PC?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=9A=84=E7=A8=8B=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .vscode/settings.json | 4 +- CMakeLists.txt | 8 +++- README.md | 4 +- cmakepc.cmake | 61 +++++++++++++++++++++++++++ dep/zlinuxcomponents | 2 +- sh/envsetup.sh | 72 ++++++++++++++++++++++++++++++++ sh/envsetup_pc.sh | 5 --- sh/envsetup_rk3328.sh | 64 ---------------------------- sh/envsetuppc.sh | 11 +++++ sh/iflytool.sh | 24 ++++++++--- sh/packet.sh | 4 +- src/service/voiceprocess/asr_service.hpp | 53 +++++++++++++++++++++++ 13 files changed, 231 insertions(+), 82 deletions(-) create mode 100644 cmakepc.cmake create mode 100755 sh/envsetup.sh delete mode 100755 sh/envsetup_pc.sh delete mode 100755 sh/envsetup_rk3328.sh create mode 100755 sh/envsetuppc.sh 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.sh b/sh/envsetup.sh new file mode 100755 index 0000000..546a759 --- /dev/null +++ b/sh/envsetup.sh @@ -0,0 +1,72 @@ +#!/bin/bash +# 全局变量 +LIBSDIR=${PROJECT_PATH}/libs/ + +# Config +CONFIG_SUPPORT_ALSA=true +CONFIG_SUPPORT_FFMPEG=true + +# Code Begin +cd ${PROJECT_PATH}/build + +# 下载cmake +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}/build/cmake/bin/cmake + +# 下载依赖库 + +# CONFIG_SUPPORT_ALSA +if [ "$CONFIG_SUPPORT_ALSA" = true ]; then + wget -c "192.168.1.2:8021/sdk_firefly_rk3328_v2.5.1/buildtools/libasound2_dev1.1.3-5ubuntu0.6.tar.gz" + wget -c "192.168.1.2:8021/sdk_firefly_rk3328_v2.5.1/buildtools/libz.tar.gz" + rm -rf ${LIBSDIR}/alsa + rm -rf libasound2_dev1.1.3-5ubuntu0.6 + + tar -xvf libasound2_dev1.1.3-5ubuntu0.6.tar.gz + tar -xvf libz.tar.gz + + mkdir -p ${LIBSDIR}/alsa/pkgconfig/ + mkdir -p ${LIBSDIR}/alsa/include/sys/ + mkdir -p ${LIBSDIR}/alsa/lib/ + mkdir -p ${LIBSDIR}/alsa/include/sys/ + + mv libasound2_dev1.1.3-5ubuntu0.6/unpack/usr/lib/aarch64-linux-gnu/libasound.* ${LIBSDIR}/alsa/lib/ + mv libasound2_dev1.1.3-5ubuntu0.6/unpack/usr/lib/aarch64-linux-gnu/pkgconfig/alsa.pc ${LIBSDIR}/alsa/pkgconfig/ + mv libasound2_dev1.1.3-5ubuntu0.6/unpack/usr/include/alsa ${LIBSDIR}/alsa/include/ + mv libasound2_dev1.1.3-5ubuntu0.6/unpack/usr/include/sys/* ${LIBSDIR}/alsa/include/sys/ + + mv libz.so.1 ${LIBSDIR}/alsa/lib/ + + PUBLIC_LINK_DIRECTORIES="${PUBLIC_LINK_DIRECTORIES};${LIBSDIR}/alsa/lib" + PUBLIC_INCLUDE_DIRECTORIES="${PUBLIC_INCLUDE_DIRECTORIES};${LIBSDIR}/alsa/include" +fi + +# CONFIG_SUPPORT_FFMPEG +if [ "$CONFIG_SUPPORT_FFMPEG" = true ]; then + wget -c "192.168.1.2:8021/sdk_firefly_rk3328_v2.5.1/buildtools/ffmpeg-4.1.10-aarch64-20230301.tar.gz" + rm -rf ${LIBSDIR}/ffmpeg + tar -xvf ffmpeg-4.1.10-aarch64-20230301.tar.gz + mv ffmpeg-4.1.10-aarch64-20230301 ${LIBSDIR}/ffmpeg + PUBLIC_LINK_DIRECTORIES="${PUBLIC_LINK_DIRECTORIES};${LIBSDIR}/ffmpeg/lib" + PUBLIC_INCLUDE_DIRECTORIES="${PUBLIC_INCLUDE_DIRECTORIES};${LIBSDIR}/ffmpeg/include" +fi + +echo "PUBLIC_LINK_DIRECTORIES=${PUBLIC_LINK_DIRECTORIES}" +echo "PUBLIC_INCLUDE_DIRECTORIES=${PUBLIC_INCLUDE_DIRECTORIES}" + +# 构造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/envsetup_rk3328.sh b/sh/envsetup_rk3328.sh deleted file mode 100755 index 0ebbcad..0000000 --- a/sh/envsetup_rk3328.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/bash -# 全局变量 -LIBSDIR=${PROJECT_PATH}/libs/ - -# Config -CONFIG_SUPPORT_ALSA=true -CONFIG_SUPPORT_FFMPEG=true - -# Code Begin -cd ${PROJECT_PATH}/build - -# 下载cmake -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}/build/cmake/bin/cmake - -# 下载依赖库 - -# CONFIG_SUPPORT_ALSA -if [ "$CONFIG_SUPPORT_ALSA" = true ]; then - wget -c "192.168.1.2:8021/sdk_firefly_rk3328_v2.5.1/buildtools/libasound2_dev1.1.3-5ubuntu0.6.tar.gz" - wget -c "192.168.1.2:8021/sdk_firefly_rk3328_v2.5.1/buildtools/libz.tar.gz" - rm -rf ${LIBSDIR}/alsa - rm -rf libasound2_dev1.1.3-5ubuntu0.6 - - tar -xvf libasound2_dev1.1.3-5ubuntu0.6.tar.gz - tar -xvf libz.tar.gz - - mkdir -p ${LIBSDIR}/alsa/pkgconfig/ - mkdir -p ${LIBSDIR}/alsa/include/sys/ - mkdir -p ${LIBSDIR}/alsa/lib/ - mkdir -p ${LIBSDIR}/alsa/include/sys/ - - mv libasound2_dev1.1.3-5ubuntu0.6/unpack/usr/lib/aarch64-linux-gnu/libasound.* ${LIBSDIR}/alsa/lib/ - mv libasound2_dev1.1.3-5ubuntu0.6/unpack/usr/lib/aarch64-linux-gnu/pkgconfig/alsa.pc ${LIBSDIR}/alsa/pkgconfig/ - mv libasound2_dev1.1.3-5ubuntu0.6/unpack/usr/include/alsa ${LIBSDIR}/alsa/include/ - mv libasound2_dev1.1.3-5ubuntu0.6/unpack/usr/include/sys/* ${LIBSDIR}/alsa/include/sys/ - - mv libz.so.1 ${LIBSDIR}/alsa/lib/ - - PUBLIC_LINK_DIRECTORIES="${PUBLIC_LINK_DIRECTORIES};${LIBSDIR}/alsa/lib" - PUBLIC_INCLUDE_DIRECTORIES="${PUBLIC_INCLUDE_DIRECTORIES};${LIBSDIR}/alsa/include" -fi - -# CONFIG_SUPPORT_FFMPEG -if [ "$CONFIG_SUPPORT_FFMPEG" = true ]; then - wget -c "192.168.1.2:8021/sdk_firefly_rk3328_v2.5.1/buildtools/ffmpeg-4.1.10-aarch64-20230301.tar.gz" - rm -rf ${LIBSDIR}/ffmpeg - tar -xvf ffmpeg-4.1.10-aarch64-20230301.tar.gz - mv ffmpeg-4.1.10-aarch64-20230301 ${LIBSDIR}/ffmpeg - PUBLIC_LINK_DIRECTORIES="${PUBLIC_LINK_DIRECTORIES};${LIBSDIR}/ffmpeg/lib" - PUBLIC_INCLUDE_DIRECTORIES="${PUBLIC_INCLUDE_DIRECTORIES};${LIBSDIR}/ffmpeg/include" -fi - -echo "PUBLIC_LINK_DIRECTORIES=${PUBLIC_LINK_DIRECTORIES}" -echo "PUBLIC_INCLUDE_DIRECTORIES=${PUBLIC_INCLUDE_DIRECTORIES}" - -# 构造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 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