9 changed files with 180 additions and 56 deletions
-
3.vscode/settings.json
-
48CMakeLists.txt
-
2dep/iflytopcpp
-
24sh/envsetup_rk3328.sh
-
2sh/iflytool.sh
-
2sh/packet.sh
-
59src/audio_recorder.cpp
-
50src/main.cpp
-
46src/zmain.hpp
@ -1 +1 @@ |
|||
Subproject commit ea4118ddeb8238ccc065a2c11237ad7be056f89e |
|||
Subproject commit 2ae150407bb2beb45b2d3155a114992bdb59798e |
@ -1,11 +1,27 @@ |
|||
#!/bin/bash |
|||
# 下载编译器 |
|||
cd ${PROJECT_PATH}/build |
|||
wget -c "ftp://zftpuser:zftpzwsd@192.168.1.2/zwsd/gnu_gcc_release/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.gz" |
|||
tar -xvf "gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.gz" |
|||
|
|||
wget -c "192.168.1.2:8021/sdk_firefly_rk3328_v2.5.1/buildtools/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.gz" |
|||
rm -rf gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu |
|||
tar -xvf gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.gz |
|||
|
|||
BUILD_TOOLS_PATH=${PROJECT_PATH}/build/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/ |
|||
|
|||
# alsa 支持 |
|||
wget -c "192.168.1.2:8021/sdk_firefly_rk3328_v2.5.1/buildtools/libasound2_dev1.1.3-5ubuntu0.6.tar.gz" |
|||
rm -rf libasound2_dev1.1.3-5ubuntu0.6 |
|||
tar -xvf libasound2_dev1.1.3-5ubuntu0.6.tar.gz |
|||
mkdir -p ${BUILD_TOOLS_PATH}/pkgconfig/ |
|||
mkdir -p ${BUILD_TOOLS_PATH}/include/sys/ |
|||
|
|||
mv libasound2_dev1.1.3-5ubuntu0.6/unpack/usr/lib/aarch64-linux-gnu/libasound.* ${BUILD_TOOLS_PATH}/lib/ |
|||
mv libasound2_dev1.1.3-5ubuntu0.6/unpack/usr/lib/aarch64-linux-gnu/pkgconfig/alsa.pc ${BUILD_TOOLS_PATH}/pkgconfig/ |
|||
mv libasound2_dev1.1.3-5ubuntu0.6/unpack/usr/include/alsa ${BUILD_TOOLS_PATH}/include/ |
|||
mv libasound2_dev1.1.3-5ubuntu0.6/unpack/usr/include/sys/* ${BUILD_TOOLS_PATH}/include/sys/ |
|||
|
|||
# 构造build.sh |
|||
echo "cmake ../ \\" >${PROJECT_PATH}/build/build.sh |
|||
echo "-DCMAKE_C_COMPILER=${PROJECT_PATH}/build/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc \\" >>${PROJECT_PATH}/build/build.sh |
|||
echo "-DCMAKE_CXX_COMPILER=${PROJECT_PATH}/build/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ \\" >>${PROJECT_PATH}/build/build.sh |
|||
echo "-DCMAKE_C_COMPILER=ccache ${PROJECT_PATH}/build/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc \\" >>${PROJECT_PATH}/build/build.sh |
|||
echo "-DCMAKE_CXX_COMPILER=ccache ${PROJECT_PATH}/build/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ \\" >>${PROJECT_PATH}/build/build.sh |
|||
chmod +x ${PROJECT_PATH}/build/build.sh |
@ -0,0 +1,59 @@ |
|||
#include "zmain.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/audio/audio_recoder.hpp"
|
|||
#include "zlinuxcomponents/rootfs_auto_update.hpp"
|
|||
#include "zservice_container/zservice_container.hpp"
|
|||
//
|
|||
using namespace iflytop; |
|||
using namespace core; |
|||
using namespace std; |
|||
using namespace clipp; |
|||
|
|||
/***********************************************************************/ |
|||
/***********************************************************************/ |
|||
/***********************************************************************/ |
|||
/***********************************************************************/ |
|||
ZMAIN(); |
|||
/**
|
|||
* @brief ctrl+C 回调 |
|||
*/ |
|||
ofstream outputwav("audio_recorder.wav", ios::binary | ios::trunc); |
|||
void Main::onSIGINT() { |
|||
logger->info("save audio to {}", "audio_recorder.wav"); |
|||
exit(0); |
|||
} |
|||
|
|||
int Main::main(int argc, char *argv[]) { |
|||
string g_host_server_ip; |
|||
string g_device_id; |
|||
|
|||
int channel = 0; |
|||
int rate = 0; |
|||
#if 1
|
|||
auto cli = ( //
|
|||
(required("-c") & value("c", channel)).doc("channel"), //
|
|||
(required("-r") & value("r", rate)).doc("rate") //
|
|||
); |
|||
if (!parse(argc, argv, cli)) { |
|||
cout << make_man_page(cli, argv[0]); |
|||
exit(-1); |
|||
} |
|||
#endif
|
|||
|
|||
shared_ptr<AudioRecoder> audioRecoder(new AudioRecoder()); |
|||
audioRecoder->onRecordData.connect([&](shared_ptr<AudioClip> audioclip) { |
|||
logger->info("on audio {}", audioclip->toString()); |
|||
// 保存语音到文件
|
|||
outputwav.write((char *)audioclip->getVoice(), audioclip->getVoiceLen()); |
|||
}); |
|||
|
|||
audioRecoder->initialize("recorder", channel, rate, SND_PCM_FORMAT_S16_LE); |
|||
audioRecoder->startRecord(); |
|||
logger->info("system setup end."); |
|||
while (true) sleep(1000); |
|||
} |
@ -0,0 +1,46 @@ |
|||
|
|||
#include <pthread.h>
|
|||
#include <stdio.h>
|
|||
#include <sys/types.h>
|
|||
#include <sys/wait.h>
|
|||
#include <unistd.h>
|
|||
|
|||
#include "zclipp/include/clipp.h"
|
|||
|
|||
#define ZMAIN() \
|
|||
class Main { \ |
|||
ENABLE_LOGGER(Main); \ |
|||
\ |
|||
private: \ |
|||
unique_ptr<Thread> thread; \ |
|||
\ |
|||
private: \ |
|||
int main(int argc, char *argv[]); \ |
|||
\ |
|||
public: \ |
|||
Main(/* args */) {} \ |
|||
~Main() {} \ |
|||
void run(int argc, char *argv[]) { \ |
|||
thread.reset(new Thread("main", [&]() { exit(main(argc, argv)); })); \ |
|||
while (true) sleep(1000); \ |
|||
} \ |
|||
void onSIGINT(); \ |
|||
}; \ |
|||
Main *g_main; \ |
|||
void onsignal(int signo) { g_main->onSIGINT(); } \ |
|||
int main(int argc, char *argv[]) { \ |
|||
Main main; \ |
|||
g_main = &main; \ |
|||
::signal(SIGINT, onsignal); \ |
|||
main.run(argc, argv); \ |
|||
} |
|||
|
|||
#define BUILD_AND_REG_SERRVICE(type, ...) \
|
|||
logger->info("build {}.....", #type); \ |
|||
shared_ptr<type> type##_val(new type(__VA_ARGS__)); \ |
|||
ServiceContrainer::get().regService(type##_val); |
|||
|
|||
#define BUILD_AND_REG_MOCK_SERRVICE(type, mocktype, ...) \
|
|||
logger->info("build {}.....", #type); \ |
|||
shared_ptr<type> type##_val(new mocktype(__VA_ARGS__)); \ |
|||
ServiceContrainer::get().regService(type##_val); |
Write
Preview
Loading…
Cancel
Save
Reference in new issue