|
@ -22,6 +22,9 @@ using namespace std; |
|
|
|
|
|
|
|
|
void MainControlService::initializeVoiceProcess() { |
|
|
void MainControlService::initializeVoiceProcess() { |
|
|
m_beforeWakeupVoiceProcesser->setAmplifyDB(20); |
|
|
m_beforeWakeupVoiceProcesser->setAmplifyDB(20); |
|
|
|
|
|
m_beforeasrVoiceProcesser->setAmplifyDB(24); |
|
|
|
|
|
|
|
|
|
|
|
logger->info("MainControlService::start....."); |
|
|
|
|
|
|
|
|
/**
|
|
|
/**
|
|
|
* @brief 声卡录音回调 |
|
|
* @brief 声卡录音回调 |
|
@ -33,6 +36,7 @@ void MainControlService::initializeVoiceProcess() { |
|
|
logger->error("onRecordData audioClip is null"); |
|
|
logger->error("onRecordData audioClip is null"); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
m_audioLoggingService->loggerMICVoice(audioClip); // 录音
|
|
|
m_audioLoggingService->loggerMICVoice(audioClip); // 录音
|
|
|
m_beforeWakeupVoiceProcesser->writeVoice(audioClip); // 交给唤醒词预处理逻辑
|
|
|
m_beforeWakeupVoiceProcesser->writeVoice(audioClip); // 交给唤醒词预处理逻辑
|
|
|
if (m_conversationSession) m_beforeasrVoiceProcesser->writeVoice(audioClip); // 交给asr预处理逻辑
|
|
|
if (m_conversationSession) m_beforeasrVoiceProcesser->writeVoice(audioClip); // 交给asr预处理逻辑
|
|
@ -71,14 +75,19 @@ void MainControlService::initializeVoiceProcess() { |
|
|
logger->error("onAfterProcessVoice audioClip is null"); |
|
|
logger->error("onAfterProcessVoice audioClip is null"); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
auto session = m_conversationSession; |
|
|
|
|
|
|
|
|
|
|
|
if (!session) return; |
|
|
|
|
|
|
|
|
if (!m_conversationSession) return; |
|
|
|
|
|
|
|
|
if (zsteady_clock().elapsedTimeMs(session->getBuildtp()) < 1000) return; |
|
|
|
|
|
|
|
|
|
|
|
m_audioLoggingService->loggerASRVoice(audioClip); |
|
|
m_aiuiService->aiuiWrite((const char*)audioClip->data(), audioClip->size()); |
|
|
m_aiuiService->aiuiWrite((const char*)audioClip->data(), audioClip->size()); |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
m_aiuiService->onMessage.connect([&](json& rxjson) { |
|
|
m_aiuiService->onMessage.connect([&](json& rxjson) { |
|
|
//
|
|
|
|
|
|
lock_guard<recursive_mutex> lock(m_voiceprocessmutex); |
|
|
lock_guard<recursive_mutex> lock(m_voiceprocessmutex); |
|
|
|
|
|
|
|
|
json msg = rxjson; |
|
|
json msg = rxjson; |
|
|
m_workQueue->enQueue([this, msg]() { |
|
|
m_workQueue->enQueue([this, msg]() { |
|
|
try { |
|
|
try { |
|
@ -91,6 +100,17 @@ void MainControlService::initializeVoiceProcess() { |
|
|
|
|
|
|
|
|
m_audioRecoderService->startRecord(); |
|
|
m_audioRecoderService->startRecord(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void MainControlService::triggerProcessConversationSession() { |
|
|
|
|
|
m_smartSoundboxPlayer->playConversationTTS(m_conversationSession->getAsrTTSLocalURL(), nullptr); |
|
|
|
|
|
json nlpResult = m_conversationSession->getNlpResult(); |
|
|
|
|
|
if (nlpResult["data"]["intent"]["shouldEndSession"]) { |
|
|
|
|
|
logger->info("endSession"); |
|
|
|
|
|
endSession(); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
void MainControlService::processasrResult_nlp(json& rxjson) { |
|
|
void MainControlService::processasrResult_nlp(json& rxjson) { |
|
|
logger->info("rx nlp:{}", rxjson.dump()); |
|
|
logger->info("rx nlp:{}", rxjson.dump()); |
|
|
m_conversationSession->setNlpResult(rxjson); |
|
|
m_conversationSession->setNlpResult(rxjson); |
|
@ -107,6 +127,7 @@ void MainControlService::processasrResult_tts(json& rxjson) { |
|
|
if (isendFrame) { |
|
|
if (isendFrame) { |
|
|
logger->info("rx tts end,url={}", ttsurl); |
|
|
logger->info("rx tts end,url={}", ttsurl); |
|
|
m_conversationSession->setAsrTTSLocalURL(ttsurl); |
|
|
m_conversationSession->setAsrTTSLocalURL(ttsurl); |
|
|
|
|
|
triggerProcessConversationSession(); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -162,6 +183,8 @@ void MainControlService::constructSession() { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
m_conversationSession = make_shared<ConversationSession>(); |
|
|
m_conversationSession = make_shared<ConversationSession>(); |
|
|
|
|
|
logger->info("constructSession:============ {} ===========", m_conversationSession->getSessionId()); |
|
|
|
|
|
m_audioLoggingService->triggerWakeup(m_conversationSession->getSessionId()); |
|
|
m_aiuiService->aiuiInit(); |
|
|
m_aiuiService->aiuiInit(); |
|
|
|
|
|
|
|
|
if (m_endsessionTimer->isRunning()) m_endsessionTimer->stop(); |
|
|
if (m_endsessionTimer->isRunning()) m_endsessionTimer->stop(); |
|
@ -182,6 +205,7 @@ void MainControlService::endSession() { |
|
|
m_aiuiService->aiuiFinished(); |
|
|
m_aiuiService->aiuiFinished(); |
|
|
m_aiuiService->aiuiDestroy(); |
|
|
m_aiuiService->aiuiDestroy(); |
|
|
} |
|
|
} |
|
|
|
|
|
m_audioLoggingService->endwakeup(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void MainControlService::initialize() { |
|
|
void MainControlService::initialize() { |
|
|