4 changed files with 200 additions and 0 deletions
-
45src/service/voiceprocess/beforeasr_voiceprocesser.cpp
-
54src/service/voiceprocess/beforeasr_voiceprocesser.hpp
-
46src/service/voiceprocess/beforewakeup_voiceprocesser.cpp
-
55src/service/voiceprocess/beforewakeup_voiceprocesser.hpp
@ -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); |
|||
} |
@ -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
|
@ -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); |
|||
} |
@ -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
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue