Browse Source

update

master
zhaohe 2 years ago
parent
commit
fe9dfa9841
  1. 45
      src/service/voiceprocess/beforeasr_voiceprocesser.cpp
  2. 54
      src/service/voiceprocess/beforeasr_voiceprocesser.hpp
  3. 46
      src/service/voiceprocess/beforewakeup_voiceprocesser.cpp
  4. 55
      src/service/voiceprocess/beforewakeup_voiceprocesser.hpp

45
src/service/voiceprocess/beforeasr_voiceprocesser.cpp

@ -0,0 +1,45 @@
#include "beforeasr_voiceprocesser.hpp"
using namespace std;
using namespace iflytop;
using namespace core;
void BeforeasrVoiceProcesser::initialize() {
logger->info("BeforeasrVoiceProcesser::initialize");
m_thread.reset(new Thread("BeforeasrVoiceProcesser", [this]() {
ThisThread thisThread;
while (!thisThread.getExitFlag()) {
shared_ptr<AudioClip> audioClip;
m_audioClips.try_dequeue(audioClip);
if (audioClip == nullptr) {
thisThread.sleepForMs(10);
continue;
}
processVoice(audioClip);
}
}));
}
void BeforeasrVoiceProcesser::processVoice(shared_ptr<AudioClip> audioClip) {
size_t voiceNclips = audioClip->getVoiceLen() / audioClip->getCh() / 2;
size_t voiceLen = voiceNclips * 2;
uint16_t *voice = (uint16_t *)malloc(voiceNclips * 2);
for (size_t i = 0; i < voiceNclips; i++) {
voice[i] = ((uint16_t *)audioClip->getVoice())[i * 5];
}
shared_ptr<AudioClip> afterProcessAudioClip =
make_shared<AudioClip>((uint8_t *)voice, voiceLen, 1, audioClip->getRate(), audioClip->getFormat());
onAfterProcessVoice(afterProcessAudioClip);
}
void BeforeasrVoiceProcesser::writeVoice(shared_ptr<AudioClip> audioClip) {
ZCHECK(audioClip != nullptr, "audioClip is null");
ZCHECK(audioClip->getFormat() == S16_LE, "audioClip format is not S16_LE");
ZCHECK(audioClip->getCh() == 5, "audioClip ch is not 5"); // 4mic+1ref
ZCHECK(audioClip->getRate() == 16000, "audioClip rate is not 16000");
m_audioClips.enqueue(audioClip);
}

54
src/service/voiceprocess/beforeasr_voiceprocesser.hpp

@ -0,0 +1,54 @@
//
// Created by zwsd
//
#pragma once
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <set>
#include <sstream>
#include <string>
#include <vector>
#include "iflytopcpp/core/basic/concurrentqueue/concurrentqueue.h"
#include "iflytopcpp/core/basic/nod/nod.hpp"
#include "iflytopcpp/core/spdlogfactory/logger.hpp"
#include "iflytopcpp/core/thread/thread.hpp"
#include "zlinuxcomponents/audio/audio_clip.hpp"
/**
* @brief
*
* service:BeforeasrVoiceProcesser
*
* :
*
*/
namespace iflytop {
using namespace std;
using namespace core;
using namespace moodycamel;
class BeforeasrVoiceProcesser : public enable_shared_from_this<BeforeasrVoiceProcesser> {
ENABLE_LOGGER(BeforeasrVoiceProcesser);
public:
ConcurrentQueue<shared_ptr<AudioClip>> m_audioClips;
unique_ptr<Thread> m_thread;
public:
nod::signal<void(shared_ptr<AudioClip> audioClip)> onAfterProcessVoice;
BeforeasrVoiceProcesser(){};
void initialize();
void writeVoice(shared_ptr<AudioClip> audioClip);
private:
void processVoice(shared_ptr<AudioClip> audioClip);
};
} // namespace iflytop

46
src/service/voiceprocess/beforewakeup_voiceprocesser.cpp

@ -0,0 +1,46 @@
#include "beforewakeup_voiceprocesser.hpp"
using namespace std;
using namespace iflytop;
using namespace core;
void BeforeWakeupVoiceProcesser::initialize() {
logger->info("BeforeWakeupVoiceProcesser::initialize");
m_thread.reset(new Thread("BeforeWakeupVoiceProcesser", [this]() {
ThisThread thisThread;
while (!thisThread.getExitFlag()) {
shared_ptr<AudioClip> audioClip;
m_audioClips.try_dequeue(audioClip);
if (audioClip == nullptr) {
thisThread.sleepForMs(10);
continue;
}
processVoice(audioClip);
}
}));
}
void BeforeWakeupVoiceProcesser::processVoice(shared_ptr<AudioClip> audioClip) {
size_t voiceNclips = audioClip->getVoiceLen() / audioClip->getCh() / 2;
size_t voiceLen = voiceNclips * 2;
uint16_t *voice = (uint16_t *)malloc(voiceNclips * 2);
for (size_t i = 0; i < voiceNclips; i++) {
voice[i] = ((uint16_t *)audioClip->getVoice())[i * 5];
}
shared_ptr<AudioClip> afterProcessAudioClip =
make_shared<AudioClip>((uint8_t *)voice, voiceLen, 1, audioClip->getRate(), audioClip->getFormat());
onAfterProcessVoice(afterProcessAudioClip);
}
void BeforeWakeupVoiceProcesser::writeVoice(shared_ptr<AudioClip> audioClip) {
ZCHECK(audioClip != nullptr, "audioClip is null");
ZCHECK(audioClip->getFormat() == S16_LE, "audioClip format is not S16_LE");
ZCHECK(audioClip->getCh() == 5, "audioClip ch is not 5"); // 4mic+1ref
ZCHECK(audioClip->getRate() == 16000, "audioClip rate is not 16000");
m_audioClips.enqueue(audioClip);
}

55
src/service/voiceprocess/beforewakeup_voiceprocesser.hpp

@ -0,0 +1,55 @@
//
// Created by zwsd
//
#pragma once
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <set>
#include <sstream>
#include <string>
#include <vector>
#include "iflytopcpp/core/basic/concurrentqueue/concurrentqueue.h"
#include "iflytopcpp/core/basic/nod/nod.hpp"
#include "iflytopcpp/core/spdlogfactory/logger.hpp"
#include "iflytopcpp/core/thread/thread.hpp"
#include "zlinuxcomponents/audio/audio_clip.hpp"
/**
* @brief
*
* service:BeforeWakeupVoiceProcesser
*
* :
* bosuzengqiang
*
*/
namespace iflytop {
using namespace std;
using namespace core;
using namespace moodycamel;
class BeforeWakeupVoiceProcesser : public enable_shared_from_this<BeforeWakeupVoiceProcesser> {
ENABLE_LOGGER(BeforeWakeupVoiceProcesser);
public:
ConcurrentQueue<shared_ptr<AudioClip>> m_audioClips;
unique_ptr<Thread> m_thread;
public:
nod::signal<void(shared_ptr<AudioClip> audioClip)> onAfterProcessVoice;
BeforeWakeupVoiceProcesser(){};
void initialize();
void writeVoice(shared_ptr<AudioClip> audioClip);
private:
void processVoice(shared_ptr<AudioClip> audioClip);
};
} // namespace iflytop
Loading…
Cancel
Save