|
|
@ -58,16 +58,30 @@ class AudioLoggingService : public enable_shared_from_this<AudioLoggingService> |
|
|
|
public: |
|
|
|
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
|