Browse Source

update submodule

master
zhaohe 2 years ago
parent
commit
b2b7ec8691
  1. 2
      dep/iflytopcpp
  2. 2
      dep/zlinuxcomponents
  3. 8
      src/service/main_control_service.cpp
  4. 3
      src/service/voiceprocess/audio_logging_service.cpp
  5. 28
      src/service/voiceprocess/audio_logging_service.hpp

2
dep/iflytopcpp

@ -1 +1 @@
Subproject commit f5a2ccc1a0f8dfabb7e162eca6d0245231658f0f
Subproject commit c8cd4807bfb283471475b180e14452b88758f63d

2
dep/zlinuxcomponents

@ -1 +1 @@
Subproject commit 83404cdad908c9db64a161bef14dd1bbd2bcbf5d
Subproject commit 12989cdd5a45d6279ead3278aac7f4dd97af0824

8
src/service/main_control_service.cpp

@ -19,7 +19,6 @@ using namespace std;
/*********************************************************************************************************************
* ============================================================================================================= *
*********************************************************************************************************************/
void MainControlService::initialize() {
GET_TO_SERVICE(m_zwebService);
GET_TO_SERVICE(m_deviceIOService);
@ -30,7 +29,6 @@ void MainControlService::initialize() {
GET_TO_SERVICE(m_audioRecoderService);
GET_TO_SERVICE(m_audioLoggingService);
// 监听从webservice来的websocket消息
m_zwebService->startWork([this](const json& command, json& receipt) {
try {
@ -48,8 +46,12 @@ void MainControlService::initialize() {
return;
}
logger->info("onRecordData {}", audioClip->size());
m_beforeWakeupVoiceProcesser->writeVoice(audioClip);
// 1. 保存此阶段语音到文件中
m_audioLoggingService->loggerMICVoice(audioClip);
// voice -> before wakeup
m_beforeWakeupVoiceProcesser->writeVoice(audioClip);
});
m_beforeWakeupVoiceProcesser->onAfterProcessVoice.connect([this](shared_ptr<AudioClip> audioClip) {

3
src/service/voiceprocess/audio_logging_service.cpp

@ -21,7 +21,7 @@ static string gettimestamp() {
return fmt::format("{:0>4}{:0>2}{:0>2}{:0>2}{:0>2}{:0>2}", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour,
tm.tm_min, tm.tm_sec);
}
void AudioLoggingService::cleanupLogVoiceByTime(string prefix, int maxnum) {
void AudioLoggingService::cleanupLogVoiceByTime(string prefix, size_t maxnum) {
vector<string> files;
LinuxCoreUtils().ls(fmt::format("ls -1 -trd {}", prefix), files);
@ -48,6 +48,7 @@ void AudioLoggingService::loggerMICVoice(shared_ptr<AudioClip> audioClip) {
cleanupLogVoiceByTime("./voice/rt/mic_voice_*.wav", RT_STORAGE_CLIP_NUMS);
m_rtMicVoiceFile.reset(new WavRecorder("./voice/rt/mic_voice_" + gettimestamp() + ".wav"));
m_rtMicVoiceFile->writeHeader(audioClip->getRate(), audioClip->getBitsPerSample(), audioClip->getCh(), 0);
m_rtMicVoiceFile->dumpheader(logger);
m_rtMicVoiceFile->writeVoice(audioClip);
} else {
m_rtMicVoiceFile->writeVoice(audioClip);

28
src/service/voiceprocess/audio_logging_service.hpp

@ -56,18 +56,32 @@ class AudioLoggingService : public enable_shared_from_this<AudioLoggingService>
class WavRecorder {
public:
ofstream m_file;
uint32_t m_durationMS = 0;
ofstream m_file;
uint32_t m_durationMS = 0;
uint32_t m_totalsize;
WAVHeader wavHeader;
WavRecorder(string filename) { m_file.open(filename, ios::binary); }
WavRecorder(string filename) { m_file.open(filename, ios::binary | ios::trunc); }
void writeHeader(uint32_t sample_rate, uint16_t bits_per_sample, uint16_t num_channels, uint32_t num_samples) {
WAVHeader wavHeader(sample_rate, bits_per_sample, num_channels, num_samples);
wavHeader.initialize(sample_rate, bits_per_sample, num_channels, 0);
m_file.write((char*)wavHeader.data(), wavHeader.size());
}
void dumpheader(logger_t logger) { wavHeader.dump(logger); }
void writeVoice(shared_ptr<AudioClip> audioClip) {
if (!audioClip) return;
m_file.write((char*)audioClip->data(), audioClip->size());
m_durationMS += audioClip->getAudioDurationMs();
m_totalsize += audioClip->size();
// 写入音频文件
m_file.seekp(0, ios::end);
m_file.write((char*)audioClip->data(), audioClip->size());
// 更新wav头
wavHeader.resize(m_totalsize);
m_file.seekp(4, ios::beg);
m_file.write((char*)&wavHeader.header.chunk_size, 4);
m_file.seekp(40, ios::beg);
m_file.write((char*)&wavHeader.header.subchunk2_size, 4);
}
};
@ -85,7 +99,9 @@ class AudioLoggingService : public enable_shared_from_this<AudioLoggingService>
void loggerASRVoice(shared_ptr<AudioClip> audioClip);
void setWakeupState(bool state);
void clearupWavRecorder();
void cleanupLogVoiceByTime(string prefix, int maxnum);
private:
void cleanupLogVoiceByTime(string prefix, size_t maxnum);
};
} // namespace iflytop
Loading…
Cancel
Save