Browse Source

update

master
zhaohe 2 years ago
parent
commit
09957d455d
  1. 8
      CMakeLists.txt
  2. 2
      dep/zlinuxcomponents
  3. 14
      env/speaker_control.sh
  4. 2
      sh/packet.sh
  5. 4
      src/main.cpp
  6. 15
      src/service/main_control_service.cpp
  7. 5
      src/service/main_control_service.hpp
  8. 2
      src/service/voiceprocess/audio_logging_service.cpp
  9. 15
      src/service/voiceprocess/beforewakeup_voiceprocesser.cpp
  10. 5
      src/service/voiceprocess/beforewakeup_voiceprocesser.hpp
  11. 17
      src/service/voiceprocess/wakeup_processer.cpp
  12. 5
      src/service/voiceprocess/wakeup_processer.hpp

8
CMakeLists.txt

@ -101,7 +101,11 @@ zadd_executable_simple(
) )
zadd_executable_simple(TARGET alsaplayer_main.out SRC zadd_executable_simple(TARGET alsaplayer_main.out SRC
dep/zlinuxcomponents/alsaplayer/alsaplayer_main.cpp)
dep/zlinuxcomponents/alsaplayer/test_alsaplayer_main.cpp)
zadd_executable_simple(TARGET audio_recorder_main.out SRC zadd_executable_simple(TARGET audio_recorder_main.out SRC
dep/zlinuxcomponents/audio/audio_recorder_main.cpp) dep/zlinuxcomponents/audio/audio_recorder_main.cpp)
zadd_executable_simple(TARGET test_asr_main.out SRC dep/zlinuxcomponents/aiui_ws/aiui_main.c)
zadd_executable_simple(TARGET test_asr_main.out SRC
dep/zlinuxcomponents/aiui_ws/aiui_main.c)
zadd_executable_simple(
TARGET test_smart_soundbox_player.out SRC
dep/zlinuxcomponents/alsaplayer/test_smart_soundbox_player.cpp)

2
dep/zlinuxcomponents

@ -1 +1 @@
Subproject commit 12989cdd5a45d6279ead3278aac7f4dd97af0824
Subproject commit 7712be17e4276764ca5d76281b69b457be7ca379

14
env/speaker_control.sh

@ -1,12 +1,16 @@
#!/bin/bash #!/bin/bash
# #
# 引脚编号:GPIO2-A3
# 引脚编号:GPIO2-A3
# Linux中对应的编号: 32*2 + (A-A)*8 + 3 = GPIO67 # Linux中对应的编号: 32*2 + (A-A)*8 + 3 = GPIO67
# #
# 配置GPIO1_D4 # 配置GPIO1_D4
echo 60 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio60/direction
echo 1 > /sys/class/gpio/gpio60/value
if [ ! -d /sys/class/gpio/gpio60 ]; then
echo 60 >/sys/class/gpio/export
fi
echo out >/sys/class/gpio/gpio60/direction
# 复位下芯片
echo 0 >/sys/class/gpio/gpio60/value
sleep 1
echo 1 >/sys/class/gpio/gpio60/value

2
sh/packet.sh

@ -55,7 +55,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
wget_and_unzip xiaomaoxiaomao ftp://zftpuser:zftpzwsd@192.168.1.2/zwsd/manufacturer_mycroft/hotworld/xiaomaoxiaomao/xiaomaoxiaomao_module_20220609.tar.gz
# 下载唤醒词引擎 # 下载唤醒词引擎
wget_and_unzip precise 192.168.1.2:8021/manufacturer_mycroft/mycroft-precise-release/precise-all_0.3.0_aarch64.tar.gz wget_and_unzip precise 192.168.1.2:8021/manufacturer_mycroft/mycroft-precise-release/precise-all_0.3.0_aarch64.tar.gz
# 下载唤醒词语音 # 下载唤醒词语音

4
src/main.cpp

@ -150,7 +150,7 @@ void Main::buildVoiceProcessService() {
// WakeupProcesser // WakeupProcesser
BUILD_AND_REG_SERRVICE(WakeupProcesser); BUILD_AND_REG_SERRVICE(WakeupProcesser);
GET_SERVICE(WakeupProcesser)->initialize("./precise/precise-engine", "xiaomaoxiaomao/xiaomaoxiaomao.pb");
GET_SERVICE(WakeupProcesser)->initialize("./precise/precise-engine", "xiaomaoxiaomao/xiaomaoxiaomao.pb", "1600");
// AsrProcesser // AsrProcesser
const char *appid = "5938b7c7"; // 应用ID,在AIUI开放平台创建并设置 const char *appid = "5938b7c7"; // 应用ID,在AIUI开放平台创建并设置
@ -175,7 +175,7 @@ int Main::main(int argc, char *argv[]) {
// 播放器-SmartSoundBoxPlayer // 播放器-SmartSoundBoxPlayer
BUILD_AND_REG_SERRVICE(SmartSoundBoxPlayer); BUILD_AND_REG_SERRVICE(SmartSoundBoxPlayer);
GET_SERVICE(SmartSoundBoxPlayer)->initialize(80);
GET_SERVICE(SmartSoundBoxPlayer)->initialize(50, 50);
/** /**
* @brief * @brief
*/ */

15
src/service/main_control_service.cpp

@ -28,6 +28,7 @@ void MainControlService::initialize() {
GET_TO_SERVICE(m_wakeupProcesser); GET_TO_SERVICE(m_wakeupProcesser);
GET_TO_SERVICE(m_audioRecoderService); GET_TO_SERVICE(m_audioRecoderService);
GET_TO_SERVICE(m_audioLoggingService); GET_TO_SERVICE(m_audioLoggingService);
GET_TO_SERVICE(m_smartSoundboxPlayer);
// 监听从webservice来的websocket消息 // 监听从webservice来的websocket消息
m_zwebService->startWork([this](const json& command, json& receipt) { m_zwebService->startWork([this](const json& command, json& receipt) {
@ -40,16 +41,20 @@ void MainControlService::initialize() {
} }
}); });
m_beforeWakeupVoiceProcesser->setAmplifyDB(20);
m_wakeupProcesser->onWakeupSignal.connect([this](float wakeup_score) {
logger->info("onWakeupSignal wakeup_score {}", wakeup_score);
m_smartSoundboxPlayer->triggerWakeup();
});
m_audioRecoderService->onRecordData.connect([this](shared_ptr<AudioClip> audioClip) { m_audioRecoderService->onRecordData.connect([this](shared_ptr<AudioClip> audioClip) {
if (!audioClip) { if (!audioClip) {
logger->error("onRecordData audioClip is null"); logger->error("onRecordData audioClip is null");
return; return;
} }
logger->info("onRecordData {}", audioClip->size());
// 1. 保存此阶段语音到文件中 // 1. 保存此阶段语音到文件中
m_audioLoggingService->loggerMICVoice(audioClip); m_audioLoggingService->loggerMICVoice(audioClip);
// voice -> before wakeup // voice -> before wakeup
m_beforeWakeupVoiceProcesser->writeVoice(audioClip); m_beforeWakeupVoiceProcesser->writeVoice(audioClip);
}); });
@ -60,7 +65,9 @@ void MainControlService::initialize() {
return; return;
} }
m_audioLoggingService->loggerBeforeWakeupVoice(audioClip); m_audioLoggingService->loggerBeforeWakeupVoice(audioClip);
logger->info("onAfterProcessVoice {}", audioClip->size());
// voice -> wakeup
// logger->info("before wakeup voice processer process voice size {}", audioClip->size());
m_wakeupProcesser->processVoice(audioClip->data(), audioClip->size());
}); });
m_audioRecoderService->startRecord(); m_audioRecoderService->startRecord();

5
src/service/main_control_service.hpp

@ -26,6 +26,9 @@
#include "zservice_container/zservice_container.hpp" #include "zservice_container/zservice_container.hpp"
#include "zwebservice/zwebservice.hpp" #include "zwebservice/zwebservice.hpp"
//
#include "zlinuxcomponents/alsaplayer/smart_soundbox_player.hpp"
/** /**
* @brief * @brief
* *
@ -53,6 +56,8 @@ class MainControlService : public enable_shared_from_this<MainControlService> {
shared_ptr<AudioRecoderService> m_audioRecoderService; shared_ptr<AudioRecoderService> m_audioRecoderService;
shared_ptr<AudioLoggingService> m_audioLoggingService; shared_ptr<AudioLoggingService> m_audioLoggingService;
shared_ptr<SmartSoundBoxPlayer> m_smartSoundboxPlayer;
typedef enum { typedef enum {
kzwebService, kzwebService,
} fromwhere_t; } fromwhere_t;

2
src/service/voiceprocess/audio_logging_service.cpp

@ -48,7 +48,7 @@ void AudioLoggingService::loggerMICVoice(shared_ptr<AudioClip> audioClip) {
cleanupLogVoiceByTime("./voice/rt/mic_voice_*.wav", RT_STORAGE_CLIP_NUMS); cleanupLogVoiceByTime("./voice/rt/mic_voice_*.wav", RT_STORAGE_CLIP_NUMS);
m_rtMicVoiceFile.reset(new WavRecorder("./voice/rt/mic_voice_" + gettimestamp() + ".wav")); m_rtMicVoiceFile.reset(new WavRecorder("./voice/rt/mic_voice_" + gettimestamp() + ".wav"));
m_rtMicVoiceFile->writeHeader(audioClip->getRate(), audioClip->getBitsPerSample(), audioClip->getCh(), 0); m_rtMicVoiceFile->writeHeader(audioClip->getRate(), audioClip->getBitsPerSample(), audioClip->getCh(), 0);
m_rtMicVoiceFile->dumpheader(logger);
// m_rtMicVoiceFile->dumpheader(logger);
m_rtMicVoiceFile->writeVoice(audioClip); m_rtMicVoiceFile->writeVoice(audioClip);
} else { } else {
m_rtMicVoiceFile->writeVoice(audioClip); m_rtMicVoiceFile->writeVoice(audioClip);

15
src/service/voiceprocess/beforewakeup_voiceprocesser.cpp

@ -26,13 +26,26 @@ void BfWakeupVProcesser::processVoice(shared_ptr<AudioClip> audioClip) {
} }
vector<uint8_t> voice; vector<uint8_t> voice;
audioClip->getOneCHVoice(voice, 0); audioClip->getOneCHVoice(voice, 0);
ZCHECK(audioClip->getFormat() == S16_LE, "audioClip format is not S16_LE");
int16_t *p = (int16_t *)voice.data();
for (int i = 0; i < voice.size() / 2; i++) {
p[i] = p[i] * m_amplify;
}
shared_ptr<AudioClip> afterProcessAudioClip = shared_ptr<AudioClip> afterProcessAudioClip =
make_shared<AudioClip>((uint8_t *)voice.data(), voice.size(), 1, audioClip->getRate(), audioClip->getFormat()); make_shared<AudioClip>((uint8_t *)voice.data(), voice.size(), 1, audioClip->getRate(), audioClip->getFormat());
onAfterProcessVoice(afterProcessAudioClip); onAfterProcessVoice(afterProcessAudioClip);
} }
void BfWakeupVProcesser::setAmplify(float amplify) {
logger->info("BfWakeupVProcesser::setAmplify amplify={}", amplify);
m_amplify = amplify;
}
void BfWakeupVProcesser::setAmplifyDB(float amplifydb) { m_amplify = pow(10, amplifydb / 20); }
void BfWakeupVProcesser::writeVoice(shared_ptr<AudioClip> audioClip) { void BfWakeupVProcesser::writeVoice(shared_ptr<AudioClip> audioClip) {
ZCHECK(audioClip != nullptr, "audioClip is null"); ZCHECK(audioClip != nullptr, "audioClip is null");
ZCHECK(audioClip->getFormat() == S16_LE, "audioClip format is not S16_LE"); ZCHECK(audioClip->getFormat() == S16_LE, "audioClip format is not S16_LE");

5
src/service/voiceprocess/beforewakeup_voiceprocesser.hpp

@ -40,6 +40,8 @@ class BfWakeupVProcesser : public enable_shared_from_this<BfWakeupVProcesser> {
unique_ptr<Thread> m_thread; unique_ptr<Thread> m_thread;
float m_amplify = 1.0;
public: public:
nod::signal<void(shared_ptr<AudioClip> audioClip)> onAfterProcessVoice; nod::signal<void(shared_ptr<AudioClip> audioClip)> onAfterProcessVoice;
@ -47,6 +49,9 @@ class BfWakeupVProcesser : public enable_shared_from_this<BfWakeupVProcesser> {
void initialize(); void initialize();
void setAmplify(float amplify);
void setAmplifyDB(float amplifydb);
void writeVoice(shared_ptr<AudioClip> audioClip); void writeVoice(shared_ptr<AudioClip> audioClip);
private: private:

17
src/service/voiceprocess/wakeup_processer.cpp

@ -3,12 +3,18 @@ using namespace std;
using namespace iflytop; using namespace iflytop;
using namespace core; using namespace core;
#define CHUNK_SIZE "2048"
#define CHUNK_SIZE "1600"
void WakeupProcesser::initialize(string precise_engine, string wakeupmodulepath) {
void WakeupProcesser::initialize(string precise_engine, string wakeupmodulepath, string chunksize) {
logger->info("initialize precise_engine:{}, wakeupmodulepath:{}, chunksize:{}", precise_engine, wakeupmodulepath,
chunksize);
wakeupProcesser.reset(new MycroftPreciseWapper()); wakeupProcesser.reset(new MycroftPreciseWapper());
wakeupProcesser->initialize(precise_engine.c_str(), wakeupmodulepath.c_str(), CHUNK_SIZE);
wakeupProcesser->initialize(precise_engine.c_str(), wakeupmodulepath.c_str(), chunksize.c_str());
m_chucksize = atoi(chunksize.c_str());
} }
int WakeupProcesser::getChunkSize() { return m_chucksize; }
void WakeupProcesser::dumpwakeup_info(float source) { void WakeupProcesser::dumpwakeup_info(float source) {
if (source > 0.9) { if (source > 0.9) {
logger->info("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++{}", source); logger->info("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++{}", source);
@ -30,7 +36,12 @@ void WakeupProcesser::dumpwakeup_info(float source) {
} }
void WakeupProcesser::processVoice(uint8_t* voice, size_t voiceLen) { void WakeupProcesser::processVoice(uint8_t* voice, size_t voiceLen) {
if (!voice) return;
ZCHECK(voiceLen == m_chucksize, "voiceLen != m_chucksize");
// logger->info("before processVoice {}", voiceLen);
wakeupProcesser->processVoice(voice, voiceLen); wakeupProcesser->processVoice(voice, voiceLen);
// logger->info("end processVoice");
wakeupProcesser->regWakeupCB([&](float wakeupscore) { wakeupProcesser->regWakeupCB([&](float wakeupscore) {
if (!wakeupflag) { if (!wakeupflag) {
if (wakeupscore > 0.1) { if (wakeupscore > 0.1) {

5
src/service/voiceprocess/wakeup_processer.hpp

@ -40,6 +40,7 @@ class WakeupProcesser : public enable_shared_from_this<WakeupProcesser> {
bool wakeupflag = false; bool wakeupflag = false;
tp_steady last_wakeup_timepoint; tp_steady last_wakeup_timepoint;
function<void(float wakeup_score)> m_cbfunc; function<void(float wakeup_score)> m_cbfunc;
int m_chucksize = 0;
public: public:
nod::signal<void(float wakeup_score)> onWakeupSignal; nod::signal<void(float wakeup_score)> onWakeupSignal;
@ -47,10 +48,12 @@ class WakeupProcesser : public enable_shared_from_this<WakeupProcesser> {
public: public:
WakeupProcesser(){}; WakeupProcesser(){};
void initialize(string precise_engine, string wakeupmodulepath);
void initialize(string precise_engine, string wakeupmodulepath, string chunksize);
void processVoice(uint8_t* voice, size_t voiceLen); void processVoice(uint8_t* voice, size_t voiceLen);
int getChunkSize();
private: private:
void dumpwakeup_info(float source); void dumpwakeup_info(float source);
}; };
Loading…
Cancel
Save