From 009962f1207591ac1acaaba790ff13219ce1237b Mon Sep 17 00:00:00 2001 From: jenz Date: Tue, 2 Jun 2026 00:35:46 +0100 Subject: [PATCH] just re-using this push function for torch incomming audio data. it empties the buffer in case torchlight stopped emitting instead of draining it over time --- extension.cpp | 8 ++++---- extension.h | 2 +- ringbuffer.cpp | 4 +--- ringbuffer.h | 1 + 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/extension.cpp b/extension.cpp index ad9d499..6c8b1a8 100644 --- a/extension.cpp +++ b/extension.cpp @@ -962,7 +962,7 @@ void CVoice::OnDataReceived(CClient *pClient, int16_t *pData, size_t Samples) Samples -= DataStartsAt; } - if(!m_Buffer.Push(pData, Samples)) + if(!m_Buffer.PushTorch(pData, Samples)) { smutils->LogError(myself, "Buffer push failed!!! Samples: %u, Free: %u\n", Samples, m_Buffer.CurrentFree()); return; @@ -1065,7 +1065,7 @@ void CVoice::HandleVoiceData() smutils->LogError(myself, "Opus encode failed: %s", opus_strerror(nbBytes)); return; } - BroadcastVoiceDataCelt(pClient, aBuffer, SamplesPerChannel); + BroadcastVoiceDataTorchlightCelt(pClient, aBuffer, SamplesPerChannel); // Write frame size *pFrameSize = (uint16_t)nbBytes; @@ -1120,7 +1120,7 @@ void CVoice::HandleVoiceData() } } -void CVoice::BroadcastVoiceDataCelt(IClient *pClient, int16_t *pPCM, int nSamples) +void CVoice::BroadcastVoiceDataTorchlightCelt(IClient *pClient, int16_t *pPCM, int nSamples) { // pPCM is stereo interleaved at 48000 Hz (SamplesPerChannel * 2 total samples) // Downsample to mono 22050 Hz and accumulate into m_torchMonoAccum @@ -1172,7 +1172,7 @@ void CVoice::BroadcastVoiceDataCelt(IClient *pClient, int16_t *pPCM, int nSample } else { - smutils->LogError(myself, "BroadcastVoiceDataCelt: celt_encode failed: %d", celtBytes); + smutils->LogError(myself, "BroadcastVoiceDataTorchlightCelt: celt_encode failed: %d", celtBytes); } m_torchMonoAccumLen -= CELT_FRAME_SIZE; diff --git a/extension.h b/extension.h index 2fc74e8..0cafc79 100644 --- a/extension.h +++ b/extension.h @@ -140,7 +140,7 @@ public: void ListenSocket(); void PushPlayerVoiceData(int playerSlot, int nBytes, char *data); - void BroadcastVoiceDataCelt(IClient *pClient, int16_t *pPCM, int nSamples); + void BroadcastVoiceDataTorchlightCelt(IClient *pClient, int16_t *pPCM, int nSamples); void TranscodeNoSteamToSteam(int playerSlot, int nBytes, char *data); void HandlePlayerVoiceData(int playerSlot); diff --git a/ringbuffer.cpp b/ringbuffer.cpp index 11d0efa..1576475 100644 --- a/ringbuffer.cpp +++ b/ringbuffer.cpp @@ -65,8 +65,7 @@ void CRingBuffer::Mix(int16_t *pData, size_t Samples) } } -/* -bool CRingBuffer::Push(int16_t *pData, size_t Samples) +bool CRingBuffer::PushTorch(int16_t *pData, size_t Samples) { if(Samples > CurrentFree()) return false; @@ -127,7 +126,6 @@ bool CRingBuffer::Push(int16_t *pData, size_t Samples) return true; } -*/ bool CRingBuffer::Push(int16_t *pData, size_t Samples) { diff --git a/ringbuffer.h b/ringbuffer.h index d764fce..24e38f8 100644 --- a/ringbuffer.h +++ b/ringbuffer.h @@ -12,6 +12,7 @@ public: bool Pop(int16_t *pData, size_t Samples); bool Push(int16_t *pData, size_t BufLen); + bool PushTorch(int16_t *pData, size_t BufLen); size_t TotalLength(); size_t TotalFree();