Skip to content

Commit 6791453

Browse files
committed
add bitrate event
1 parent 49e0f68 commit 6791453

File tree

2 files changed

+18
-9
lines changed

2 files changed

+18
-9
lines changed

src/Audio.cpp

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
audio.cpp
44
55
Created on: Oct 28.2018 */char audioI2SVers[] ="\
6-
Version 3.4.2l ";
6+
Version 3.4.2m ";
77
/* Updated on: Sep 08.2025
88
99
Author: Wolle (schreibfaul1)
@@ -5343,7 +5343,7 @@ int Audio::sendBytes(uint8_t* data, size_t len) {
53435343
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
53445344
void Audio::calculateAudioTime(uint16_t bytesDecoderIn, uint16_t bytesDecoderOut) {
53455345

5346-
if(m_dataMode != AUDIO_LOCALFILE && m_streamType != ST_WEBFILE) return; //guard
5346+
// if(m_dataMode != AUDIO_LOCALFILE && m_streamType != ST_WEBFILE) return; //guard
53475347

53485348
float audioCurrentTime = 0.0;
53495349

@@ -5372,14 +5372,21 @@ void Audio::calculateAudioTime(uint16_t bytesDecoderIn, uint16_t bytesDecoderOut
53725372
audioCurrentTime = (uint32_t)(m_cat.sumBytesIn * 8 / m_cat.nominalBitRate);
53735373
}
53745374
else{
5375-
m_cat.sumBitRate += ((m_cat.deltaBytesIn * 8000) / delta_t); // we know the time and bytesIn to compute the bitrate
5375+
double instBitRate = (m_cat.deltaBytesIn * 8000.0) / delta_t;
53765376
m_cat.counter ++;
5377-
m_cat.avrBitRate = m_cat.sumBitRate / m_cat.counter;
5378-
if(m_cat.counter > 5){ // < 5 is too imprecise
5379-
m_avr_bitrate = m_cat.avrBitRate;
5380-
audioCurrentTime = (float)m_cat.sumBytesIn * 8 / m_cat.avrBitRate;
5381-
m_audioFileDuration = round(((float)m_audioDataSize * 8 / m_cat.avrBitRate));
5377+
m_cat.avrBitRate += (instBitRate - m_cat.avrBitRate) / m_cat.counter;
5378+
if((abs(m_cat.avrBitRate- m_cat.oldAvrBitrate < 50)) && !m_cat.avrBitrateStable){
5379+
m_cat.brCounter++;
5380+
if(m_cat.brCounter > 6){
5381+
m_cat.avrBitrateStable = m_cat.avrBitRate;
5382+
info(evt_bitrate, "%i", m_cat.avrBitrateStable);
5383+
info(evt_info, "estimated bitrate (b/s): %lu", m_cat.avrBitrateStable);
5384+
}
53825385
}
5386+
m_avr_bitrate = m_cat.avrBitRate;
5387+
audioCurrentTime = (float)m_cat.sumBytesIn * 8 / m_cat.avrBitRate;
5388+
m_audioFileDuration = round(((float)m_audioDataSize * 8 / m_cat.avrBitRate));
5389+
m_cat.oldAvrBitrate = m_avr_bitrate;
53835390
}
53845391
m_cat.deltaBytesIn = 0;
53855392
m_audioCurrentTime = round(audioCurrentTime);

src/audiolib_structs.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,13 +153,15 @@ namespace audiolib {
153153
struct cat_t { // used in calculateAudioTime
154154
uint64_t sumBytesIn;
155155
uint64_t sumBytesOut;
156-
uint32_t sumBitRate;
157156
uint32_t counter;
158157
uint32_t timeStamp;
159158
uint32_t deltaBytesIn;
160159
uint32_t nominalBitRate;
161160
uint32_t avrBitRate;
162161
uint16_t syltIdx;
162+
uint32_t avrBitrateStable;
163+
uint32_t oldAvrBitrate;
164+
uint32_t brCounter;
163165
};
164166

165167
struct cVUl_t { // used in computeVUlevel

0 commit comments

Comments
 (0)