store voice chat silence periods

This commit is contained in:
BotoX 2021-05-10 23:52:01 +02:00
parent e2b31d00ac
commit 292c4c3b24
4 changed files with 28 additions and 1 deletions

View File

@ -66,6 +66,11 @@ void Logic::Finish(bool dirty)
data["voice"]["total_time"] = voiceTotalTime;
data["voice"]["active_time"] = voiceActiveTime;
for(const auto& o : context->voiceWriter->m_silence)
{
data["voice"]["silence"] += json({o.first, o.second});
}
std::string out = data.dump(2, ' ', false, json::error_handler_t::replace);
out.append("\n");
fwrite(out.c_str(), out.size(), 1, context->outputFp);

View File

@ -64,8 +64,8 @@ void SourceGameContext::Start()
void SourceGameContext::Finish(bool dirty)
{
logic->Finish(dirty);
voiceWriter->Finish();
logic->Finish(dirty);
}
void SourceGameContext::StartCommandPacket(const CommandPacket& packet)

View File

@ -149,6 +149,12 @@ void VoiceDataWriter::Start()
void VoiceDataWriter::Finish()
{
if(m_isSilenced)
{
m_isSilenced = false;
m_silence.back().second = m_curTick;
}
for(auto& state : m_playerVoiceStates)
{
state.second.celt_decoder.Destroy();
@ -180,7 +186,19 @@ void VoiceDataWriter::EndCommandPacket(const PacketTrailingBits& trailingBits)
// Skip silence if noone talks for at least 3 seconds
if((m_curTick - m_lastVoiceTick) / context->fTickRate > 3.0)
{
if(!m_isSilenced)
{
m_isSilenced = true;
m_silence.emplace_back(std::make_pair(m_curTick, 0));
}
m_silenceTicks += (m_curTick - m_lastTick);
}
else if(m_isSilenced)
{
m_isSilenced = false;
m_silence.back().second = m_curTick;
}
for(auto& state : m_playerVoiceStates)
{

View File

@ -92,4 +92,8 @@ private:
static const int sQuality = 3;
eCodec m_Codec = CODEC_NONE;
public:
bool m_isSilenced = false;
std::vector<std::pair<int32_t, int32_t>> m_silence;
};